[Spring] 영속성 컨텍스트(Persistence Context) : 정의 / 사용 / FetchType
·
Spring
1. 영속성 컨텍스트 (Persistence Context) 1.1. 영속성 컨텍스트란?JPA가 데이터베이스와 직접 연결하지 않고 엔티티 객체를 관리하는 메모리 공간엔티티를 관리하는 1차 캐시(저장소)매번 DB-JPA 직접 통신하지 않고, 엔티티를 보관하면서 변경 사항 추적 1.2. 엔티티의 생명주기 1.2.1. 비영속 (new/transient)영속성 컨텍스트와 전혀 관계가 없는 상태Member member = new Member();member.setId("member1");member.setUsername("홍길동"); 1.2.2. 영속 (managed)영속성 컨텍스트에 저장된 상태EntityManager em = EntityManagerFactory.createEntityManager();em..
[Spring] Spring AOP로 Log 기록하기 : @Around / @Before / @After
·
Spring
1. Spring AOPAOP (Aspect-Oriented Programming) : 관점 지향 프로그래밍을 지원하는 기술로깅, 보안, 트랜잭션 관리 등과 같은 공통 관심사를 모듈화코드 중복을 줄이고 유지 보수성 향상핵심 로직과 부가 기능 분리 1.1. 주요 용어용어설명Aspect공통적인 기능들을 모듈화한 것을 의미TargetAspect가 적용될 대상 (메소드, 클래스 등이 해당)Join pointAspect가 적용될 수 있는 시점 (메소드 실행 전, 후 등)AdviceAspect의 기능을 정의한 것Point cutAdvice를 적용할 메소드의 범위를 지정 1.2. 주요 어노테이션어노테이션설명@Aspect해당 클래스를 Aspect로 사용하겠다는 명시@Before대상 메소드가 실행되기 전에 Advic..
[Spring] 로깅 방식과 레이어별 로깅 전략
·
Spring
1. 상황별 로그 레벨INFO 레벨 : 실제 운영 환경에서 주로 사용정상 동작과 주의해야 할 사항 기록 → 운영 상태 모니터링 및 조치DEBUG 이하 레벨 : 주로 개발 과정에서 사용 (시스템 내부 동작 이해, 디버깅) 2. 로그 기록 방식AOP / Interceptor / Filter: 반복되는 입출력 흐름 (API 요청/응답, 서비스 공통 처리)직접 log.info() 작성: 도메인 이벤트, 비즈니스 핵심 로직프레임워크 설정: SQL 로그, 성능 지표 등 (Hibernate, MyBatis log 설정을 통한 SQL 로그) 3. 애플리케이션 레이어별 로깅 3.1. ControllerAOP / Interceptor로 공통 처리 (ex. Spring AOP)상황API 요청 / 응답주요 입력 파..
[Spring] 로깅(Logging) / 로그레벨 / 스프링에서 로깅
·
Spring
1. 로깅(Logging)이란?정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템을 작성하는 활동버그에 대한 유용한 정보 제공성능에 관한 통계와 정보 제공로그를 출력하는 방법System.out.println()로깅(Logging) 라이브러리 1.1. [로그 출력 방법] System.out.printlnprint() 메서드를 사용 가능왜 상용서버에서 사용하지 않을까?성능 저하 : synchronized로 동기화 되어 있어 쓰레드 Lock 걸림날짜/시간/타입 등 정보가 없음데이터를 쌓기 어려움 : 콘솔창에 출력만 1.2. [로그 출력 방법] 로깅 라이브러리최소한의 정보(날짜, 시간, 타입 등) 제공데이터를 서버에 저장하고 파일화 가능대표적인 로깅 라이브러리java.util.logging : JD..
[Spring] Thymeleaf(타임리프)란?
·
Spring
1. Thymeleaf 란?HTML 파일에서 동적으로 데이터를 넣어주는 템플릿 엔진HTML과 Java를 연결해주는 역할Java 기반 템플릿 엔진 → 주로 Java(Spring Boot)에서 사용된다Spring MVC 패턴에서 V(View)에 해당하는 화면을 구현할 때 사용아래 사진처럼 return “viewname”의 View를 구현 2. Spring에서 Thymeleaf 사용하기 2.1. 의존성 추가build.gradle : 의존성 추가dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' ...}[자동] application.properties의존성을 추가하면 아래 코드가 자동으로 추가..
[Spring] 테스트 / JUnit / Mockito / 스프링의 계층별 단위테스트(Controller, Service, Repository)
·
Spring
이번에 컨트롤러 테스트 코드를 작성해보면서 정리한 것들! 1. 테스트테스트 : 프로그램을 실행했을 때 요구사항에 맞춰 동작하는지 검증하는 행위범위에 따른 분류단위 테스트 (Unit Test)통합 테스트 (Integration Test)E2E 테스트 (End-to-End Test) 1.1. 단위 테스트하나의 클래스와 메서드 단위로 비즈니스 로직 검증외부 의존성 없이, 하나의 기능/메서드가 정상 동작하는지 확인TDD에서의 테스트케이스는 주로 단위 테스트 작성을 의미자동화되어 사용 (CI; Continuous Integration)Java에서는 주로 JUnit5를 사용하여 작성모듈이 의존성을 가지는 경우, 의존 모듈을 Mock이라는 가짜 객체로 만들어 행동 및 결과값이 나오도록 정의한 후 테스트 가능@Te..
[Spring] 스프링의 기본적인 예외처리 / 예외처리 방법
·
Spring
1. Spring의 기본적인 예외 처리 방식Spring은 기본적으로 에러 처리를 위한 BasicErrorController가 구현되어 있다별도의 설정 없다면, /error로 에러 요청 다시 전달하도록 WAS 설정되어 있다.BasicErrorController로 에러 처리 요청을 전달WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러-> 컨트롤러(예외발생)-> 인터셉터 -> 서블릿(디스패처 서블릿) -> 필터 -> WAS(tomcat)-> WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러(BaicErrorController) 1.1. BasicErrorController@RequestMapping("${server.error...
[Spring] 스프링의 디렉토리 구조 : 계층형 / 도메인형
·
Spring
1. 스프링 디렉토리 구조스프링 디렉토리 구조를 설계하는 방식은 크게 계층형 / 도메인형 2가지가 있다 1.1. 계층형src/main/java/com/example/project/├── controller├── service├── repository├── dto├── entityMVC를 기반으로 각 계층을 대표하는 directory구조가 직관적이라 이해가 쉬움모든 도메인이 같은 디렉토리에 섞여 있음하나의 디렉토리에 많은 class 파일이 모여 모듈 단위 분리가 어려움 1.2. 도메인형src/main/java/com/example/project/├── DemoApplication.java├── domain│ │ ├── coupon│ │ │ ├── controller│ │ │ ├..
[Spring] Thread와 Java / Spring에서의 Multi-Thread 구현
·
Spring
0. 동기 / 비동기 & 블로킹 / 논블록킹동기 / 비동기 : 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지 관점블로킹 / 논블록킹 : 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지 관점 0.1. 동기(Synchronous) vs 비동기(Asynchronous)요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지전체적인 작업에 대한 순차적인 흐름 유무동기 : 요청한 작업에 대해 완료 여부를 따져 순차대로 처리하는 것요청한 작업에 대해 순서가 지켜진다비동기 : 요청한 작업에 대해 완료 여부를 따지지 않기 때문에 자신의 다음 작업을 그대로 수행요청한 작업에 대해 순서가 지켜지지 않을 수 있다느린 작업(like I..
[Spring] 빌드 관리 도구 Maven vs Gradle
·
Spring
재직 중에 Maven만 사용하다가 요즘은 Gradle이 더 간결하고 많이 쓰인다길래 써보면서 차이점을 기록하려고 합니다 1. 빌드 관리 도구 (Build Tool)Maven과 Gradle은 모두 빌드 관리 도구작업종속성 다운로드소스코드를 바이너리 코드로 컴파일바이너리 코드를 패키징테스트 실행프로덕션 시스템에 배포 2. Maven vs Gradle 차이 2.1. Maven vs Gradle 차이 GradleMaven스크립트적은 양의 스크립트로 짧고 간결한 작성 가능프로젝트가 커질수록 길고 가독성 떨어짐동적 빌드동적 빌드는 Groovy 스크립트로 플러그인 호출하거나 직접 코드 작성 가능정적 형태의 XML 기반이라 동적 빌드 적용 어려움멀티 프로젝트설정 주입 방식 사용 → 멀티 프로젝트에 적합멀티 프로..