[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..
[Git] Git 브랜치 전략 : Git-Flow, Github-Flow, Gitlab-Flow
·
Git
0. PR (Pull Request) 과정git clone : github의 저장소 복제브랜치 생성 및 이동소스코드 작성 및 변경git add : 작업 내용을 스테이징 영역에 저장git commit : 변경 사항 저장git push : 원격 저장소에 소스코드 올림Pull Request : fork한 기존 저장소에 소스코드 반영 1. Git Flow1.1. Branchmaster : 기준이 되어 제품을 배포하는 브랜치develop : 개발 브랜치개발자들이 이 브랜치로 각자 작업한 기능을 Mergefeature : 단위 기능을 개발하는 브랜치기능 개발이 완료되면 develop 브랜치에 Mergerelease : 배포를 위해 master로 보내기 전, 먼저 QA(품질검사)를 하기 위한 브랜치hotfix :..
[Web] REST API란?
·
Web
1. REST💡 REpresentational State Transfer등장 배경 : 복잡한 네트워크 통신(ex. 인터넷)과 멀티 플랫폼(ex. 다양한 브라우저와 모바일 디바이스 등)의 등장에 따라 이를 관리하기 위한 지침으로 만들어졌다 1.1. REST 란?소프트웨어 프로그램 아키텍처의 한 형식HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)를 명시하고HTTP Method (POST, GET, PUT, DELETE, PATCH 등)을 통해해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미Create : 데이터 생성 (POST)Read : 데이터 조회 (GET)Update : 데이터 수정 (PUT, PATCH)Delete : 데이터..
[DB] Redis란?
·
DB
1. Redis란?💡 REmote DIctionary Server 빠른 읽기 및 쓰기 성능을 제공하는 메모리 기반 오픈 소스 데이터베이스특징Key-Value 데이터 구조 기반다양한 데이터 구조 지원 (문자열, 리스트, 해시, 집합, 정렬된 집합 등)인메모리 데이터 저장소 ****: 메모리에 데이터를 저장NoSQL 데이터베이스 중 하나영속성싱글 스레드로 동작명령어를 이벤트 루프(Event Loop) 방식으로 처리명령어를 Event Queue에 적재하고 싱글 스레드로 하나씩 처리메모리를 사용하기 때문에 싱글 스레드로도 빠른 처리 가능멀티 스레드의 동시성 문제 피하기 가능 : Context Switch, Deadlock 발생 X여러 대의 서버 구성 가능 (Master - Slave)단점데이터 영속성복잡한 쿼..