인프런 워밍업 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?
}
이번 주 회고 사항
잘한 점:
강의를 잘 따라갔고 코틀린을 공부하면서 많은 시간을 보냈기 때문에 뿌듯한 하루가 되었던 것 같다.
아쉬운 점:
정리를 다 못해서 아쉬웠다.. 다음엔 더 열심히 할 것이다!
다음 주 계획
강의 밀리지 말고 정해진 분량 정해진 날 듣기!
댓글을 작성해보세요.