커리큘럼(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
- JDBC의 장점을 유지하면서, 전통적방식의 JDBC단점을 극복하여, 간결한 형태의 API 사용법을 제공하며 기존 방식에서 지원하지 않는 편리한 기능 제공
- 반복적으로 하는 작업을 대신
- SQL에 바인딩할 값을 지정만 해주면 됨
- 사용전 DB커넥션을 가져오는 DataSource가 강제화
커넥션 풀
- 여러 명의 사용자를 동시에 처리하는 웹 어플리케이션
- DB연결을 이용할 때 매번 연결하는 방식이 아닌 미리 연결을 맺고 사용하는 Connection Pool을 이용해 성능을 향상시킴
- 커넥션 풀링은 미리 정해진 개수만큼 DB커넥션을 풀에 준비해두고, 어플리케이션이 요청할 때마다 Pool에서 꺼내서 할당하며, 다시 돌려 받아서 Pool에 넣는 기법
- 속도면에서 빠르며, HikariCP 라이브러리를 사용
- Mysql Connector
- Spring-JDBC
- 히카리CP (커넥션 풀)
- Spring-test(테스트) - DB연결을 테스트하기 위해 사용<선택사항>
- 히카리 빈 설정
- DataSource 빈 설정
- JdbcTemplate 빈 설정
Mybatis
- 개발자가 지정한 SQL, 고급 매핑을 지원하는 프레임워크
- JDBC코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
- 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드 유지
- DAO 계층을 대신함
- DAO의 Interface의 구현클래스를 xml파일이 대신
//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;
}
}