Spring

Spring/기타

Logger

Logging Logging이란 애플리케이션의 로그를 기록하는 작업을 말하며 Spring에서는 주로 SLF4J(Simple Logging Facade for Java)와 Logback, Log4j와 같은 로깅 라이브러리를 주로 사용해 로그를 기록한다. 단순히 화면에 정보를 출력하는 sysout보다는 더 많은 기능을 제공하는 로깅 라이브러리로 로그를 기록하는 것이 더 좋은 방법이다. 아래는 SLF4J로 로그를 기록하는 코드이다. import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mysql.cj.log.Slf4JLogger; class LoggerTest { Logger lo..

Spring/Spring Legacy

MyBatis

MyBatis 자바 Object와 SQL을 맵핑하는 SQL Mapper이다. Object - SQL 사이의 parameter mapping, result mapping 작업을 자동으로 해준다. SQL을 별도의 파일(xml)로 분리해서 관리한다. 반복되는 JDBC 코드가 제거된다. MyBatis도 JDBC를 기반으로 동작한다. RDB에 종속적인 단점이 있지만 복잡한 쿼리도 쉽게 적용할 수 있기에 ORM Framework와 같이 사용되는 추세이다. JDBC 동작 방식 DataSource 객체(구현체) 준비 DB Connection (DataSource로부터 커넥션을 가져옴) SQL 작성, parameter mapping 실행 R.S Data Get (result Mapping) Close JDBC 코드를 작..

Spring/Spring Legacy

스프링 MVC 설정 파일, 동작 순서

설정 파일 Eclipse에서 Spring Legacy 프로젝트를 열면 3개의 설정 파일(xml)이 있다. web.xml 서블릿 컨테이너 설정 파일. 톰캣이 실행되면 web.xml을 통해 서블릿, 필터 등의 설정 수행 ex - 디스패처 서블릿 등록, post 요청 파라미터 인코딩을 수행하는 필터 등록 servlet-context.xml 웹, MVC 관련 빈 객체가 정의되는 스프링 설정 파일 (ex - 핸들러 어댑터, 뷰 리졸버, 컨트롤러) 해당 설정 파일에 정의된 빈 객체는 Spring Container에 생성됨 웹과 관련 있는 객체 component-scan 요청 맵핑 설정 위 설정은 InternalResourceViewResolver가 논리적 뷰 이름으로부터 물리 뷰 경로를 만들 때 사용되는 접두사(p..

Spring/Spring DB

스프링 트랜잭션

트랜잭션 도입 시 문제점 애플리케이션 구조에는 여러 가지가 있지만 가장 단순하고 많이 사용되는 방법은 아래와 같이 3개의 계층으로 나누는 것이다. 프레젠테이션 계층 : UI 관련 처리 담당, UI 관련 기술에 종속적 서비스 계층 : 비즈니스 로직 담당, 특정 기술에 종속적이지 않고 가급적 자바 순수 코드로 작성 데이터 접근 계층 : DB 접근 담당, DB 기술에 종속적 이렇게 3개의 계층으로 나누는 이유는 애플리케이션에서 가장 중요한, 핵심 비즈니스 로직을 담고 있는 서비스 계층이 특정 기술에 종속되지 않도록, 순수 자바 코드로 구성된 비즈니스 로직만 들어가도록 하기 위함이다. 이럼으로써 시간이 지나 기술이 변해도 서비스 계층은 변경 없이 유지될 수 있으며 순수 비즈니스 로직만 있기에 유지보수도 쉬워지고..

Spring/Spring DB

트랜잭션

트랜잭션 트랜잭션은 DB가 수행하는 작업의 최소 단위이다. 즉 DB는 트랜잭션 단위로 작업을 수행한다. 트랜잭션에 대한 자세한 내용은 아래 글을 참고하자. https://gunjoon.tistory.com/96 [데이터베이스 - 7] 트랜잭션 회복과 동시성 제어 DBMS는 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 장애 발생 시 회복 기능과 동시성 제어 기능을 제공한다. 장애 발생 시 회복 기능을 통해, 여러 사용자 gunjoon.tistory.com DB 세션 클라이언트가 DB 서버와 커넥션을 맺게 되면 DB 서버는 세션을 만들고 커넥션을 통한 모든 요청은 생성된 세션을 통해 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그 후 새로운 트랜잭션을 ..

Spring/Spring DB

커넥션 풀

커넥션 풀의 필요성 JDBC로 DB에 접근하려면 먼저 커넥션(JDBC의 커넥션)을 획득해야한다. 커넥션을 새로 생성하는 과정은 아래와 같이 여러 작업이 수행되기에 많은 시간이 소모된다. DB에 접근할때마다 커넥션을 새로 생성한다면 아래의 두 가지 문제에 직면한다. 커넥션 생성에 시간이 소모되기에 요청에 대한 서버 응답 속도가 느려진다. 커넥션은 서버의 자원이다. 커넥션을 무한정 생성하면 서버의 자원이 고갈될 수 있다. 따라서 커넥션의 생성 개수를 제한해야 한다. 커넥션 풀을 사용한다면 위 두 가지 문제를 해결할 수 있다. 커넥션 풀 풀은 리소스를 보관하고 관리하는 공간이다. 풀에는 미리 생성된 리소스가 보관되어 있다. 애플리케이션은 풀에서 리소스를 가져와 사용하고 사용이 끝나면 풀에 반납한다. 즉 리소스..

Spring/Spring DB

JDBC

JDBC 애플리케이션에서 DB에 접근하기 위해 아래의 과정을 거친다. 첫 번째로 TCP/IP로 연결을 확립하고 두 번째로 DB 서버에 SQL을 전달한다. 마지막으로 DB 서버는 SQL 수행 결과를 응답한다. 이 과정을 위해 DB 사에서 전용 라이브러리를 제공하며 프로그래머는 해당 라이브러리로 위 과정을 구현한다. 하지만 DB의 종류는 무수히 많으며 DB에 따라 DB 접근 코드도 달라진다. DB 접근 코드를 바꾸지 않고도 DB를 바꿀 수 있는 방법이 없을까? 이를 위해 DB 접근 과정을 표준화한 JDBC가 등장했다. JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 즉 DB 접근 과정을 표준화한 인터페이스이다. 자바 개발자는 JDB..

Spring/Spring Test

JUnit5

JUnit5 JUnit5은 자바의 Unit 테스트 프레임워크이다. JUnit5을 사용해 자바 코드를 테스트 할 수 있다. 자바 8 이상 버전을 요구한다. JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage 3가지 모듈로 구성된다. JUnit Platform : JUnit Platform은 테스트를 발견하고 테스트 계획을 생성하는 테스트엔진 인터페이스를 정의하고 있다. Platform은 TestEngine을 통해서 테스트를 발견하고, 실행하고, 결과를 보고한다. JUnit Jupiter : Jupiter API로 테스트 코드를 작성하고 Jupiter API 기반의 테스트 코드를 실행하기 위한 테스트 엔진(Jupiter Engine)을 제공한다. Jupiter AP..

gunjoon98
'Spring' 카테고리의 글 목록