🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

인프런 워밍업 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?
}




이번 주 회고 사항

잘한 점:

강의를 잘 따라갔고 코틀린을 공부하면서 많은 시간을 보냈기 때문에 뿌듯한 하루가 되었던 것 같다.

 

아쉬운 점:

정리를 다 못해서 아쉬웠다.. 다음엔 더 열심히 할 것이다!

 

다음 주 계획
강의 밀리지 말고 정해진 분량 정해진 날 듣기!

댓글을 작성해보세요.

채널톡 아이콘