자바 프로그래밍 2주차 학습일지

2주차 (8.26, 8.28) - SQL & 스프링부트 구조

1. 기본 개념 정리

SQL: 데이터베이스를 다루는 언어
데이터베이스(DB): 정보를 저장하는 시스템
RDB (관계형 데이터베이스): Oracle, MySQL, MariaDB, MS-SQL
NoSQL (예: MongoDB): 비관계형 데이터베이스 (DynamoDB 등)
라이브러리: 코드 묶음 (필요할 때 가져다 쓰는 도구)
프레임워크: 개발을 위한 뼈대 (예: Spring, Spring Boot)

2. Java 기초 개념

Stream 만들기

Stream<>을 사용해 생성 가능

중간 연산 vs 최종 연산

중간 연산: 연산 결과가 Stream
예: filter(), map()
최종 연산: 연산 결과가 Stream이 아님
예: forEach(), collect()

객체 관계

상속 (is-a)
extends (클래스-클래스, 인터페이스-인터페이스)
implements (클래스-인터페이스)
포함 관계 (has-a) → 변수

final 키워드

final 변수: 상수
final 메서드: 오버라이딩 불가
final 클래스: 상속 불가

초기화 방법

생성자: 클래스명과 같고 리턴형 없음
선언 시 초기화
초기화 블럭
※ "에러: 클래스와 이름이 같고 리턴형 없음" → 오타, 생성자가 맞음

3. 스프링부트 3 구조 이해

학습 목표

스프링부트 3의 계층 구조와 실행 과정 이해
프로젝트 구조 파악

계층 구조

1.
Controller (프레젠테이션 계층)
HTTP 요청 → Service 전달
예: TestController
2.
Service (비즈니스 계층)
핵심 로직 처리
권한, 유효성 검사, 비즈니스 로직 담당
예: TestService
3.
Repository (퍼시스턴스 계층)
DB 접근/처리
JPA/DAO 사용
예: MemberRepository

프로젝트 기본 구조

main: 실제 코드 작성 공간
test: 테스트 코드 작성 공간
build.gradle: 빌드 설정
settings.gradle: 프로젝트 정보

프로젝트 발전시키기

의존성 추가 (build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
Plain Text
복사
계층별 코드 구현
Controller: 요청 처리
Service: 비즈니스 로직
Entity: DB 매핑
Repository: DB 접근
샘플 데이터 (resources/data.sql)
INSERT INTO member (id, name) VALUES (1, '이름1'); INSERT INTO member (id, name) VALUES (2, '이름2'); INSERT INTO member (id, name) VALUES (3, '이름3');
SQL
복사
환경 설정 (application.yml)
spring: jpa: show-sql: true properties: hibernate: format_sql: true defer-datasource-initialization: true
YAML
복사

요청-응답 과정 요약

1.
클라이언트 → HTTP 요청 (톰캣)
2.
Controller → 요청 처리
3.
Service/Repository → 로직 & DB 처리
4.
View Resolver & Template Engine → 응답 생성 (HTML, JSON 등)
5.
Dispatcher Servlet → 클라이언트 응답 반환

핵심 요약

Controller → 요청 전달
Service → 로직 처리
Repository → DB 처리