N° 01 — 목록
'Backend Development' (45)
-
Backend Development/Spring BootSpringBoot - 4. rest api
500줄로 만드는 REST API — Spring Boot 실전 패턴REST API를 만든다고 하자. 컨트롤러, DTO, 서비스, 예외 처리, 응답 표준화 — 각각을 따로 배우면 연결이 안 된다. 이 글은 하나의 흐름으로 처음부터 끝까지 REST API를 구축하는 패턴을 풀어간다: 요청 수신 → DTO 바인딩 → 서비스 호출 → 표준 응답 반환 → 예외 처리.(Spring Boot Reference - Spring MVC)DTO 계층 — 요청과 응답의 분리// Spring Boot 4 / Java 25 — DTO (record)import jakarta.validation.*;// 요청 DTO (입력 검증 포함)public record CreateUserRequest( @NotBlank String..
-
Backend Development/Spring BootSpringBoot - 03. embedded-server
java -jar app.jar 한 줄로 서버가 뜨는 원리 — 내장 서버와 실행 가능 JAR전통적 Java 웹 애플리케이션은 WAR 파일을 외부 Tomcat에 배포했다. tomcat9, catalina.sh start, deploy/ 디렉토리 — 배포가 복잡하고 환경마다 다르다. Spring Boot는 이것을 java -jar app.jar 한 줄로 끝낸다 — Tomcat이 JAR 안에 내장(embedded)되어 있기 때문이다.이 글은 내장 서버의 작동 원리, 실행 가능 JAR 구조, layered JAR(컨테이너 최적화), 그리고 Spring Boot 4.0에서 Virtual Thread와 내장 서버의 결합을 풀어간다. (Spring Boot Reference - Embedded Web Servers)..
-
Backend Development/Spring BootSpringBoot - 02. starter-config
spring-boot-starter-web 한 줄이 47개 JAR을 끌고 오는 이유 — Starter와 설정 관리build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-web' 한 줄을 추가했다. Gradle은 47개의 의존성을 다운로드한다 — Spring MVC, Jackson, Tomcat, Bean Validation, 로깅 등. 각각의 버전을 직접 맞출 필요 없이, Starter가 호환되는 버전 세트를 큐레이션한다.이 글은 Starter 의존성의 구조, application.yml 외부화, 프로파일별 설정, 그리고 Spring Boot 4.0의 모듈화된 Starter 구조를 풀어간다. (Spring Boot Refere..
-
Backend Development/Spring BootSpringBoot - 01. auto configuration
classpath에 JAR 하나 넣었을 뿐인데 DataSource가 만들어진 이유 — 자동 구성의 작동 원리Spring Boot 프로젝트에 spring-boot-starter-data-jpa 의존성을 추가했다. 코드 한 줄 안 고쳤는데 — DataSource, JdbcTemplate, EntityManagerFactory, TransactionManager bean이 자동으로 생성된다. 어떻게? Spring Boot가 자동 구성(auto-configuration)이라는 메커니즘으로, classpath에 있는 클래스와 정의된 프로퍼티를 기반으로 bean을 추론하여 등록하기 때문이다.이 글은 자동 구성의 작동 원리, @Conditional 계열 어노테이션, AutoConfiguration.imports 파일..
-
Backend Development/SpringSpring - 10. data-access
SQLException이 DataAccessException으로 바뀌는 순간 — 데이터 접근 추상화try { jdbcTemplate.queryForObject("SELECT name FROM users WHERE id = ?", String.class, id);} catch (SQLException e) { // 이 catch 블록은 실행되지 않는다}JdbcTemplate은 SQLException을 던지지 않는다. Spring은 모든 데이터 접근 예외를 unchecked DataAccessException 계층으로 변환한다 — 벤더별 에러 코드(MySQL 1062, PostgreSQL 23505, Oracle 1)를 통일된 타입(DuplicateKeyException 등)으로 매핑한다.이 글은..
-
Backend Development/SpringSpring - 09. transaction
@Transactional이 rollback하지 않는 예외 — 트랜잭션 관리의 함정@Servicepublic class TransferService { @Transactional public void transfer(Long from, Long to, long amount) { accountRepository.withdraw(from, amount); try { externalService.notify(to); // 외부 API 호출 실패 } catch (Exception e) { log.warn("알림 실패", e); // 예외를 잡아서 처리함 } accountRepositor..