Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database 
04. Jsp [Server]

05. HTML,CSS 
07. JS
06. 미니프로젝트-2W

08. SpringFramework , SrpingBoot (v)
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

스프링 프레임워크(Spring Framework)

스프링 JDBC

커넥션 풀

  • 여러 명의 사용자를 동시에 처리하는 웹 어플리케이션
  • DB연결을 이용할 때 매번 연결하는 방식이 아닌 미리 연결을 맺고 사용하는 Connection Pool을 이용해 성능을 향상시킴
  • 커넥션 풀링은 미리 정해진 개수만큼 DB커넥션을 풀에 준비해두고, 어플리케이션이 요청할 때마다 Pool에서 꺼내서 할당하며, 다시 돌려 받아서 Pool에 넣는 기법
  • 속도면에서 빠르며, HikariCP 라이브러리를 사용
  • pom.xml
  1. Mysql Connector
  2. Spring-JDBC
  3. 히카리CP (커넥션 풀)
  4. Spring-test(테스트) - DB연결을 테스트하기 위해 사용<선택사항>
  • 스프링 설정파일(bean 추가)
  • 히카리 빈 설정
  • DataSource 빈 설정
  • JdbcTemplate 빈 설정

Mybatis

   //select, update, delete에도 모두 동일하게 적용됨
  int insertOne(String name); // 매개변수가 한개(#{name})
  int insertTwo(ScoreVO vo); // 매개변수가 DTO일 때(#{getter명})
  int insertThree(Map<String,Object> map); // 매개변수가 map (#{key값})
  int insertFour(@Param("name")String name,
				   @Param("kor")String kor,
				   @Param("eng")String eng); // 매개변수가 여러개면 @Param("이름") 사용

AOP(Aspect-Oriented-Programming)

@Aspect  // AOP설정
@Component // 컴포넌트 스캔이 읽어서 빈으로 생성
public class LogAdvice {
	private static final Logger log = LoggerFactory.getLogger(LogAdvice.class);
	
	@Before("execution(* com.simple.score.service.ScoreServiceImpl*.*(..))")
	public void beforeLog() {
		log.info("메서드 동작 전에 실행됨");
	}

	@Before("execution(* com.simple.score.service.ScoreServiceImpl*.*(..))")
	public void afterLog() {
		log.info("메서드 동작후에 실행됨");
	}
	
	@AfterThrowing(pointcut= "execution(* com.simple.score.service.ScoreServiceImpl*.*(..))", throwing="e")
	public void errorLog(Exception e) {
		log.info("에러 발생시 실행:" + e);
	}
	
	// Around = before + after + afterThrowing
	@Around("execution(* com.simple.score.service.ScoreServiceImpl*.*(..))")
	public Object arroundLog(ProceedingJoinPoint jp) {
		Object result = null;
		
		// 메서드 동작 이전에 실행되는 처리
		log.info("매개변수:"+Arrays.toString(jp.getArgs()));
		log.info("실행메서드:"+jp.getTarget());
		
		Long start = System.currentTimeMillis();
		
		try {
			
			result =jp.proceed(); // AOP가 부착한 메서드가 동작
			
			// 메서드 동작 이후에 실행되는 처리
			Long end = System.currentTimeMillis();
			log.info("실행시간:"+ ((end-start)*0.001));
			
			// 로그를 남김
			String path = "C:\\Users\\Windows\\Desktop\\자바풀스택개발\\Fullstack-Study-241204-250616-\\코딩 연습\\Spring\\Log\\오늘날짜_log.txt";
			BufferedWriter bw = new BufferedWriter(new FileWriter(path,true));
		
			bw.write("매개변수:"+Arrays.toString(jp.getArgs()));
			bw.write("실행메서드:"+jp.getTarget());
			bw.write("실행시간:"+ ((end-start)*0.001));
			bw.write("\n");
			bw.flush();
			
		} catch (Throwable e) {
			e.printStackTrace();
		}
		return result;
	}
}