인프런 워밍업 3기 발자국 남기기!
📌 이번 주 학습 내용 정리
1. 웹 서비스의 구성 요소
클라이언트(Client): 웹 브라우저, 모바일 앱 등에서 서버에 요청을 보내는 역할
웹 서버(Web Server): 클라이언트 요청을 받아 정적/동적 리소스를 제공 (예: Nginx, Apache)
애플리케이션 서버(Application Server): 비즈니스 로직을 처리하는 서버 (예: Spring Boot)
데이터베이스(Database): 데이터를 저장하고 관리하는 시스템 (예: MySQL, PostgreSQL)
API(Application Programming Interface): 클라이언트와 서버 간의 데이터 교환을 위한 인터페이스
2. 웹 프레임워크와 Spring Boot
웹 프레임워크(Web Framework): 웹 애플리케이션 개발을 쉽게 해주는 도구
Spring Boot 특징
Kotlin 지원:
@Component
,@Service
,@Repository
같은 Spring 어노테이션을 그대로 사용 가능내장 서버: Tomcat, Jetty 등의 내장 서버 사용 가능 (별도 설치 불필요)
자동 설정(Auto Configuration): 설정을 최소화하여 빠른 개발 가능
REST API 개발 용이:
@RestController
및@RequestMapping
지원JPA와의 연동:
Spring Data JPA
를 이용하여 데이터베이스 조작 가능
3. HTTP와 REST API
HTTP 개념
웹에서 클라이언트와 서버 간의 통신을 위한 프로토콜
요청(Request)과 응답(Response) 구조로 동작
REST API 설계 원칙
자원(Resource) 기반 설계: 엔드포인트를 명확하게 (
/users
,/posts
등)HTTP 메서드 활용
GET
: 데이터 조회POST
: 데이터 생성PUT/PATCH
: 데이터 수정DELETE
: 데이터 삭제
Kotlin + Spring Boot REST API 예제
@RestController
@RequestMapping("/users")
class UserController(private val userService: UserService) {
@GetMapping("/{id}")
fun getUser(@PathVariable id: Long): ResponseEntity<UserResponse> {
val user = userService.getUserById(id)
return ResponseEntity.ok(user)
}
@PostMapping
fun createUser(@RequestBody request: UserRequest): ResponseEntity<UserResponse> {
val createdUser = userService.createUser(request)
return ResponseEntity.status(HttpStatus.CREATED).body(createdUser)
}
}
4. 패키지 구조 (application
, domain
, infra
, presentation
방식)
src/
├── main/
│ ├── kotlin/com/example/project
│ │ ├── application/ # Use case 및 비즈니스 로직
│ │ │ ├── service/ # 서비스 계층
│ │ │ └── usecase/ # 특정 Use Case 구현
│ │ ├── domain/ # 도메인 계층 (Entity, Aggregate, VO 등)
│ │ │ ├── model/ # 엔티티 및 VO 정의
│ │ │ ├── repository/ # 도메인 리포지토리 인터페이스
│ │ ├── infra/ # 인프라 계층 (DB, 외부 API, 메시징 등)
│ │ │ ├── repository/ # JPA 구현체 (Spring Data JPA)
│ │ │ ├── config/ # 환경 설정 (Security, JWT, Swagger 등)
│ │ │ └── external/ # 외부 API 연동
│ │ ├── presentation/ # 프레젠테이션 계층 (Controller 및 DTO)
│ │ │ ├── controller/ # REST API Controller
│ │ │ ├── request/ # 요청 객체 (Request DTO)
│ │ │ └── response/ # 응답 객체 (Response DTO)
│ │ ├── ProjectApplication.kt # Spring Boot 진입점
│ ├── resources/
│ │ ├── application.yml (설정 파일)
│ │ └── static/ (정적 파일 - 이미지, JS, CSS 등)
├── test/ (테스트 코드)
계층별 역할
application
: 비즈니스 로직 처리, 유즈케이스 관리domain
: 엔티티, VO, 도메인 서비스infra
: 데이터베이스, 외부 API, 메시징 시스템 등 기술적 인프라 관련 코드presentation
: 클라이언트와 직접 소통하는 계층 (Controller, DTO)
5. 테이블 설계
Kotlin + Spring Boot + JPA 엔티티 설계
@Entity
@Table(name = "users")
data class User(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0,
@Column(nullable = false, unique = true)
val username: String,
@Column(nullable = false)
val password: String
)
JPA Repository 예제 (
infra.repository
)
@Repository
interface UserRepository : JpaRepository<User, Long> {
fun findByUsername(username: String): User?
}
이번 주 회고 사항
잘한 점:
강의를 잘 따라갔고 코틀린을 공부하면서 많은 시간을 보냈기 때문에 뿌듯한 하루가 되었던 것 같다.
아쉬운 점:
정리를 다 못해서 아쉬웠다.. 다음엔 더 열심히 할 것이다!
다음 주 계획
강의 밀리지 말고 정해진 분량 정해진 날 듣기!
댓글을 작성해보세요.