s6511s45
@s6511s452911
수강평 작성수
1
평균평점
5.0
블로그
전체 2![[2주차] 인프런 워밍웝 클럽 Backend](https://cdn.inflearn.com/public/files/blogs/222c2dcb-32c1-4067-a675-033c66827856/comm-warm-up-class-main1.png?w=260)
2025. 03. 16.
0
[2주차] 인프런 워밍웝 클럽 Backend
인프런 워밍업 클럽 스터디 3기 -백엔드 프로젝트(Kotlin) 2주차 발자국 입니다. 강의내용 간단한 정리데이터베이스 초기화애플리케이션이 시작될 때 필요한 기본 데이터를 DB에 미리 삽입하는 역할을 합니다 @Component @Profile(value = ["default"]) class DataInitializer( private val achievementRepository: AchievementRepository, private val introductionRepository: IntroductionRepository, private val linkRepository: LinkRepository, private val skillRepository: SkillRepository, private val projectRepository: ProjectRepository, private val experienceRepository: ExperienceRepository ) {@Profile : 환경변수 설정을 정할 수 있다.@Component : Bean Configuration 파일에 Bean을 따로 등록하지 않도록 도와준다. 리포지토리 개발스프링에서 제공하는 Spring Data JPA를 사용하면, 인터페이스 상속만으로 기본적인 CRUD 기능을 사용할 수 있다.도메인에 종속되는 기능이라도 메소드명 네이밍 규칙을 따르면 그에 맞는 쿼리를 자동으로 생성해주기도 합니다.//select * from skill where name : name and skill_type = :type fun findByNameIgnoreCaseAndType(name: String, type: SkillType):Optional @Query("select e from Experience e left join fetch e.details where e.id = :id") override fun findById(id: Long): Optional }@Query : SQL과 유사한 JPQL (Java Persistence Query Language) 라는 객체지향 쿼리 언어를 통해 복잡한 쿼리 처리를 지원합니다. N+1문제JPA를 사용할 때, 연관된 엔티티를 조회할 때 추가적인 쿼리가 다량으로 발생하는 문제를 N+1 문제라고 합니다.먼저 부모 테이블에서 조회를 한 후, 엔 티티의 연관관계를 바탕으로 조회해온 데이터의 개수만큼 부모에 매핑된 자식 테이블의 데이터를 조회하기 위해 데이터베이스를 호출합니다.해결방법으로는 FetchType은 Eager을 사용하거니 default_batch_fetch_size: 10 사이즈를 조절해서 해결하는 방법이 있다.@Query 를 사용하여 JOIN FETCH을 사용함으로써 해결 할 수 있다. DTO개발엔티티(Entity) 자체를 노출하는 대신, 필요한 데이터만 전달합니다.엔티티 그대로 노출 시 불필요한 데이터까지 포함될 위험이 있습니다.필요 없는 필드를 제외하여 네트워크 트래픽 감소시킬 수 있습니다.data class AchievementDTO( val title: String, val description: String, val host: String, val achievedDate: String? ) 컨트롤러 개발@Controller 와 @RestController 를 사용할 수 있다.@Controller는 웹 페이지를 반환 할 때 사용하고, @RestController는 데이터를 반환할 경우 사용한다.@GetMapping Get매소드를 알려준다. 회고회사 다니면서 피곤하다는 핑계로 조금씩 미루다 보니, 어느새 강의만 겨우 따라가는 수준이 되어버렸다. 처음엔 하루만 쉬자는 생각이었는데, 점점 습관처럼 미루게 됐다. 결국 복습도 부족했고, 깊이 있는 공부를 할 시간도 없었다.다음 주는 미루기보다는 바로바로 시작을 해야겠다. 미루기보다는 바로 실행하고 공부를 조금씩이라도 더 해야겠다.
![[1주차] 인프런 워밍웝 클럽 Backend](https://cdn.inflearn.com/public/files/blogs/da5da500-65cc-4ed2-a487-9d30414c229c/comm-warm-up-class-main1.png?w=260)
2025. 03. 09.
0
[1주차] 인프런 워밍웝 클럽 Backend
인프런 워밍업 클럽 스터디 3기 -백엔드 프로젝트(Kotlin) 1주차 발자국 입니다. 강의내용 간단한 정리 웹 서비스를 구현하는 요소 클라이언트 : 요청하는 주체서버: 응답하는 주체데이터베이스: 데이터의 집합 프레임워크 vs 라이브러리프레임워크는 특정 구조를 제공하는 개발의 뼈대이고, 라이브러리는 특정 기능을 수행하는 코드 집합이다.프레임워크와 라이브러리의 차이는 제어의 역전에 있다.프레임워크가 코드 실행 흐름을 제어(필요한 부분 작성) 하고 라이브러리는 개발자가 필요할 때 호출해서(개발자 주도적 호출) 사용한다.Spring FrameworkSpring Framework는 Java기반의 웹 애플리케이션 프레임워크이다.기본적으로 MVC 패턴을 가지고 있다.Model: 데이터를 담습니다. Controller는 데이터를 넣고, Views는 데이터를 꺼내올 수 있습니다. View: 사용자에게 보여지는 화면을 담당합니다. Model에서 데이터를 꺼내올 수 있습니다. Controller: 요청을 받아 작 업을 수행합니다. 작업의 결과 데이터를 Model에 넣을 수 있습니다스프링 Bean과 의존성 주입(Dependency Injection)Bean은 Spring 컨테이너가 관리하는 자바 객체이다.객체를 직접 생성해서 사용하는 게 아니라 Spring컨테이너가 객체를 생성하고 관리한다. HTTPHTTP는 클라이언트와 서버 간 데이터를 주고받는 프로토콜이다.HTTP메서드로는 GET, POST, PUT, PATCH, DELETE 있고,그에따른 응답코드를 보내준다. REST APIREST는 자원을 URL로 표현하고, HTTP 메서드를 활용해 상태를 변경하는 방식-URL을 이용한 자원의 표현 -URL만으로 어떤 자원에 대한 요청인지 이해할 수 있게 합니다. -HTTP 메서드를 이용한 행위의 표현 -CRUD에 부합하도록 적절한 HTTP 메서드를 사용하여 요청이 어떤 행위를 할 것인지 파악할 수 있게 합니다. JPAJPA는 Java에서 ORM기술을 사용하는 표준 인터페이스이다.JPA는 직접 SQL을 작성하지 않고, 객체와 테이블을 자동으로 매핑한다.데이터를 객체지향 관점에서 접근 할 수 있다.성능에 대한 단점이 발생할 수 도 잇다. 트랜잭션여러 개의 데이터베이스 작업을 하나로 묶어주는 논리적인 단위이다.트랜잭션은 모든 작업이 성공해야 최종적으로 반영되며, 하나라도 실패하면 전체가 롤백 되는 원칙을 따른다. Git가장 많이 사용되는 분산 버전 관리 시스템이다.Git으로 관리할 시 커밋 메세지를 남긴다.버전을 관리 할 때 feature로 나누고 커밋 컨벤션을 따르기도 한다. 실습JPA를 사용하므로 Repository 패턴을 사용한다.interface AchievementRepository:JpaRepository { }JpaRepository는 interface를 사용한다. @Entity class ProjectSkill( project : Project, skill : Skill ):BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name ="project_skill_id") var id : Long?= null; @ManyToOne(targetEntity =Project::class, fetch = FetchType.LAZY ) @JoinColumn(name ="project_id", nullable = false) var project : Project = project @ManyToOne(targetEntity =Skill::class, fetch = FetchType.LAZY ) @JoinColumn(name ="skill_id", nullable = false) var skill : Skill = skill }@Entity : JPA 엔티디를 선언한다.@Id : 테이블의 기본키를 선언한다.@GeneratedValue : Id생성 전력을 선언한다. 다양한 전략이 있다. @Column : 테이블 컬럼에 대응함@OneToMany : 일대다 관계를 정의한다.@ManyToOne : 다대일 관계를 정의한다. 회고전체적으로 기본적인 내용이라 이론을 공부하는 느낌이었다.Kotlin이 처음이다 보니 어색한 부분도 많았다. 다음부터는 실습과 직접 코드로 구현해 보는 것을 해야겠다.




