| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- js
- junit5
- Eclipse
- 스프링부트
- javascript
- Java
- CSS
- HashMap
- Array
- math
- list
- string
- input
- 문자열
- IntelliJ
- 자바
- vscode
- 단위테스트
- junit
- 테스트자동화
- 자바문법
- 인텔리제이
- java테스트
- html
- Visual Studio Code
- SpringBoot
- 자바스크립트
- ArrayList
- 배열
- 정규식
- Today
- Total
목록SpringBoot (26)
어제 오늘 내일
과거에 MyBatis나 JDBC를 쓸 때는 개발자가 직접 SQL을 한 땀 한 땀 짰습니다. "DB에 저장해!" 하면 INSERT 쿼리를 날리고, "수정해!" 하면 UPDATE 쿼리를 날렸죠.하지만 JPA(ORM)의 세계는 다릅니다.우리는 그저 자바 객체(Entity)를 다루기만 하면 됩니다. 그러면 JPA가 알아서 적절한 SQL을 생성해 DB에 날려줍니다.이 모든 것을 가능하게 하는 JPA의 심장, '영속성 컨텍스트'에 대해 알아볼까요? 1. 영속성 컨텍스트가 뭔가요?쉽게 말해 "애플리케이션과 데이터베이스 사이에 있는 중간 관리자(캐시)"입니다.우리가 객체를 저장하거나 조회할 때, 바로 DB로 가는 게 아닙니다. 먼저 이 영속성 컨텍스트라는 곳에 보관됩니다. 그리고 JPA는 이 컨텍스트에 있는 정보를 ..
"이메일 형식이 아닙니다.", "비밀번호는 8자 이상이어야 합니다."회원가입 할 때 이런 메시지 많이 보셨죠? 프론트엔드에서도 막을 수 있지만, 백엔드에서의 검증은 필수입니다. (해커들은 프론트엔드를 우회해서 요청을 보내니까요!)오늘은 if문 도배 없이, 어노테이션 몇 개로 깔끔하게 데이터를 검증하는 Bean Validation을 알아보겠습니다. 1. 의존성 추가부터! (build.gradle)Spring Boot 2.3 버전 이상부터는 별도의 라이브러리를 추가해야 합니다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation'} 2. DTO에 규칙 정하기 (어노테이션의 마법)데이터를 받는 객체..
개발하다 보면 비즈니스 로직보다 예외 처리 코드가 더 길어지는 주객전도 현상을 자주 겪게 됩니다.try { // 로직 수행...} catch (IllegalArgumentException e) { return ResponseEntity.badRequest().build();} catch (Exception e) { return ResponseEntity.internalServerError().build();}모든 컨트롤러마다 이런 코드를 복사-붙여넣기 하고 계신가요? 오늘은 Spring Boot가 제공하는 강력한 예외 처리 메커니즘으로 코드를 획기적으로 줄이는 방법을 소개합니다. 1. 컨트롤러 안에서 해결하기: @ExceptionHandler특정 컨트롤러 안에서 발생하는 에러만 잡고 싶..
개발하다가 에러가 나면 습관적으로 sysout을 치시나요?System.out.println("여기까지 실행됨: " + data);이 한 줄의 코드가 운영 서버에서는 치명적인 성능 저하를 일으킬 수 있다는 사실, 알고 계셨나요? 오늘은 진짜 개발자가 되기 위한 첫걸음, 로깅(Logging)에 대해 알아보겠습니다. 1. 왜 System.out.println은 안 되나요?이유는 간단합니다. 성능과 관리 때문입니다.블로킹(Blocking) I/O: System.out은 출력하는 동안 프로그램이 잠시 멈춥니다(Block). 요청이 폭주하는 서버에서 모든 스레드가 멈칫멈칫한다면? 전체 성능이 뚝 떨어집니다.정보 부족: 언제(Time), 누가(Thread), 어디서(Class) 로그를 남겼는지 알 수 없습니다.제어..
애플리케이션을 개발할 때 가장 골치 아픈 것 중 하나가 바로 환경(Environment) 관리입니다.Local: 내 컴퓨터 (가벼운 H2 DB, 디버그 로그 콸콸)Dev: 개발 서버 (팀원들과 공유하는 DB)Prod: 운영 서버 (실제 서비스 DB, 로그는 에러만)이때마다 코드를 수정해서 다시 빌드한다면? 상상만 해도 끔찍하죠. 오늘은 Spring Boot가 제공하는 강력한 설정 파일(yml) 관리와 프로파일(Profile) 기능을 완벽하게 정리해 드립니다. 1. properties vs YAML(.yml): 무엇을 써야 할까?Spring Boot는 기본적으로 application.properties 파일을 만들어주지만, 실무에서는 90% 이상 YAML(야믈, .yml) 형식을 선호합니다. 이유는 가독..
Spring Boot를 처음 접할 때 가장 놀라워하는 점은 "설정할 게 거의 없다"는 것입니다. 과거 Spring Legacy 시절에는 XML 파일에 수백 줄의 설정을 적어야 했는데, 지금은 build.gradle에 라이브러리 한 줄만 추가하면 끝납니다.이게 가능한 이유는 바로 @SpringBootApplication 어노테이션 속에 숨겨진 자동 설정(Auto Configuration) 덕분입니다. 오늘은 이 '마법' 뒤에 숨겨진 '과학(로직)'을 알아보겠습니다. 1. 비밀의 열쇠: @SpringBootApplication프로젝트를 생성하면 메인 클래스 위에 딱 하나 붙어있는 이 어노테이션, 다들 보셨죠?@SpringBootApplicationpublic class MyServerApplication ..
지난 시간, 우리는 new 키워드 없이 스프링 컨테이너가 객체(Bean)를 대신 관리해 주는 의존성 주입(DI)에 대해 알아봤습니다. 그렇다면 스프링은 이 빈들을 언제 만들고, 언제 없앨까요?오늘은 애플리케이션의 성능과 안정성에 직결되는 빈의 생명주기(Lifecycle)와 스코프(Scope)에 대해 명쾌하게 정리해 드립니다. 1. 스프링 빈의 생명주기 (Lifecycle)일반적인 자바 객체는 new로 생성하고 더 이상 쓰지 않으면 가비지 컬렉터(GC)가 알아서 수거해 갑니다. 하지만 스프링 빈은 조금 더 복잡하고 정교한 과정을 거칩니다.빈이 생성되고 소멸되는 순서스프링 컨테이너가 구동될 때 다음과 같은 흐름으로 빈이 관리됩니다.스프링 컨테이너 생성스프링 빈 생성 (객체화)의존관계 주입 (DI - Set..
Spring Boot를 공부하다 보면 "DI(Dependency Injection, 의존성 주입)"라는 단어를 정말 많이 듣게 됩니다.면접 단골 질문이기도 하고, 좋은 객체지향 설계를 위해 반드시 이해해야 하는 개념이죠.오늘은 DI가 도대체 무엇인지, 그리고 왜 필드 주입보다 생성자 주입을 권장하는지 명쾌하게 정리해 드리겠습니다. 1. 의존성 주입(DI)이 뭔가요?요리를 한다고 상상해 봅시다.DI가 없는 경우: 요리사가 요리할 때마다 직접 농장에 가서 재료를 캐오고, 칼을 대장간에서 만들어옵니다. (객체가 의존 객체를 직접 생성 new)DI가 있는 경우: 요리사는 요리에만 집중하고, 누군가가 손질된 재료와 좋은 칼을 주방에 딱 놔줍니다. (외부에서 의존 객체를 주입)프로그래밍에서 DI(Dependenc..
개발을 하다 보면 System.out.println() 대신 로그(Log)를 남겨야 한다는 말을 자주 듣게 됩니다. 왜 그럴까요? 그리고 스프링 부트는 내부적으로 어떤 원리로 로그를 찍는 걸까요? 5분 만에 완벽히 이해해 봅시다!1. 왜 println이 아니라 '로깅'인가요?성능: 로그는 비동기적으로 처리하거나 파일로 남길 수 있어 서비스 성능에 영향을 덜 줍니다.레벨 제어: 운영 중에는 중요한 정보만 보고, 개발 중에는 상세한 정보를 보는 등 출력 수준을 조절할 수 있습니다.관리: 날짜별로 파일을 나누거나, 특정 용량이 넘으면 압축하는 등의 관리가 자동화됩니다. 2. 스프링 부트 로깅의 핵심 구조 (SLF4J와 Logback)스프링 부트를 쓰면 별도의 설정 없이도 로그가 찍히는 이유는 spring-bo..
H2 DBSpringBoot의 2 DB는 embedded, 오픈소스, in-memory, 관계형 데이터 베이스입니다. SpringBoot 프로젝트에 h2 db 포함 시키기 maven (pom.xml) com.h2database h2 runtime gradle (build.gradle) dependencies { // H2 runtimeOnly 'com.h2database:h2'} Spring 설정 application.properties # H2 콘솔을 활성화합니다. # 이를 통해 웹 브라우저에서 H2 데이터베이스를 관리할 수 있는 콘솔에 접근할 수 있습니다.spring.h2.console.enabled=true# 데이터베이스 URL을 설정합니다. # 'mem:testd..
