:j
항해 플러스 2주차 회고
2주차 발제 주제는 아키텍처로 나에겐 정말 낯선 주제였다. 그동안 개발을 진행해 오면서 사실 아키텍처 부분에 있어서 심도 있게 고민해 본 적이 없었던 것 같다. 웹 개발을 조금이라도 배워봤으면 모두 다 알고 있는 레이어드 아키텍처 인생을 살고 있었기 때문에 당연하다는 듯이 레이어드 아키텍처를 사용해 왔다. 클린 아키텍처, 헥사고날 아키텍처는 얼핏 들어보기는 했지만 엄청난 패키지 구조를 보고 쉽게 이해하지 못했었다. (클린 아키텍처와 헥사고날 아키텍처의 차이점이 사실 아직 좀 애매한 것 같다.) 이번 주차 과제는 클린 + 레이어드 혹은 원하는 아키텍처를 선택하여 수강신청 API 를 구현하는 과제로 진행되었으며 과제를 진행하면서 정말 엄청난 일들을 경험했다. 우선 과제를 진행하기에 앞서서 이번 기회에 클린 ..
항해 플러스 1주차 회고
항해 플러스 1주차 회고 원래는 저번주에 작성했어야 하는 1주차 회고지만.. 2주차 과제를 받고 나서 2주차 과제를 해결하기 위해 나름(?) 공부를 진행하여 2주차 과제 풀이에 우선적으로 집중하느라 이제야 작성한다. 1주차 과제는 TDD 기반으로 진행하는 간단한 포인트 충전, 사용 API 과제였다. (HashMap으로 구성된 DB 구조) TDD기반 개발 경험이 없는 나는 과제 시작 전에 급하게 '테스트 주도 개발 시작하기 - 최범균', '테스트 주도 개발 - 켄트 벡' 책을 빠르게 읽고서 1주차 과제를 진행했다. (정말 다행이라고 생각) 사실 개발을 하면서 단위 테스트 와 통합 테스트의 차이를 잘 이해하지 못했다. (1차 멘토링을 받기 전까지 @SpringBootTest를 사용해서 통합 테스트만 만들었다..
항해 플러스 백엔드 과정 합류
내가 개발자’를 해야겠다고 생각한 이유는 단순했다. 내가 학습해서 지식을 얻는 만큼 내 몸값이 올라가고, 그 자체만으로도 남들에게 인정받을 수 있다는 점이 매력적으로 느껴졌다. 정말 열심히 공부해서 남들에게 인정받을 만한 개발자가 되어야지라고 생각했다. 취업을 하기 위해 국비 학원 수료 후 공부를 하면서 솔루션 회사에 취업하게 되었다. 취업하고 나서도 열심히 공부해서 더 높이 올라갈 거라고 다짐했다. 취업 후 내가 생각했던 내 모습과는 전혀 달랐다. 현실 속 나는 180도 다른 모습으로 취업한 후 스스로에게 업무 핑계를 대며 공부를 멀리했다. 회사에서 하는 업무만으로는 기술적인 한계가 있었기에 나의 성장 속도는 멈추었다. 나는 이렇게 생각했었다. “개발자로 취업해서 일을 하게 되면 자연스럽게 내 기술 향..
[JPA]프록시를 사용하는 이유(즉시로딩, 지연로딩)
위와 같이 Member에 Team이 들어있는 경우, Member를 조회할 때 Team도 조회해야 할까? -> Member와 Team을 같이 사용하는 경우엔 괜찮지만, Member만 필요한 경우엔 Team까지 호출이 되면 리소스 낭비이다. (즉시로딩, 지연로딩의 차이점) 프록시 Hibernate가 내부에서 만든 가짜 엔티티 객체 em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getRefetence() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 em.getReference()를 호출하는 시점에는 데이터베이스에 query를 호출하지 않는다. 프록시 객체 초기화 1. em.getReference()를 호출해서 Proxy객체를 생성 2. target에 값이 없으면 영속..
[JPA] Mapped Superclass - 매핑 정보 상속
@MappedSuperclass 공통 매핑 정보가 필요할 때 사용한다. 공통 속성이 필요할 경우 하나의 객체로 관리할 수 있다. 예시로 모든 테이블에 등록자, 등록일, 수정자, 수정일이 필요한 경우 공통으로 사용할 클래스를 만들어서 @MappedSuperclass를 사용하고, 적용할 엔티티에서 상속받아 사용한다. - 상속관계 매핑 X - 엔티티 X, 테이블과 매핑 X - 부모 클래스를 상속 받는 자식 클래스에만 매핑 정보를 제공 - 조회, 검색 불가(em.find(BaseEntity) 불가) - 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다. 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로..
[JPA]상속관계 매핑
상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다. 하지만! 슈퍼타입 서브타입 관계라는 모델링 기법이 있으며, 이 기법은 객체 상속과 유사하다. 상속관계 매핑? 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 3가지 전략이 있다. 1. 조인 전략 2. 단일 테이블 전략 3. 구현 클래스마다 테이블 전략 오늘 예시로 사용할 (좌) 논리모델, (우) 물리모델 엔티티 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn public class Item { @Id @GeneratedValue private L..
[JPA] 다양한 연관관계 매핑(다대일, 일대다, 일대일, 다대다)
다양한 연관관계 매핑 우선 연관관계 매핑에 대해서 알아보기전에 테이블과 객체의 단방향, 양방향 개념을 이해해야한다. 테이블과 객체의 단방향, 양방향 테이블은 외래키 하나로 양쪽 조인이 가능하며, 사실 방향이라는 개념이 없다. 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하며, 한쪽만 참조면 단방향! 양쪽이 서로 참조면 양방향! 객체에서 양방향일 경우에는 연관관계의 주인을 정해줘야하는데, 이때 연관관계 주인은 외래키를 관리하는 객체(테이블)을 주인으로 정하면 된다. 쉽게 생각하면 테이블은 항상 다(N)쪽이 외래키를 관리한다. 다대일 ( N:1 ) 다대일 단방향 가장 많이 사용하는 연관관계이며, 다대일의 반대는 일대다이다. Member객체에서 Team객체를 참조하는 구조 @Entity public clas..
[JPA] 필드와 컬럼 매핑 어노테이션
@Column 컬럼 매핑 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable, updatable 등록, 변경 가능 여부 TRUE nullable(DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null제약 조건이 붙는다. unique(DDL) @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. colmnDefinition(DDL) 데이터베이스 컬럼 정보를 직접 줄 수 있다. ex) varchar(100) default ‘EMPTY’ 필드의 자바 타입과 방언 정보를 사용 length(DDL) 문자 길이 제약조건, String 타입에만 사용한다. 255 prec..
[JPA] 데이터베이스 스키마 자동 생성 옵션
JPA는 DDL을 자동생성 해주는 옵션을 추가할 수 있다. spring.jpa.hibernate.ddl-auto 속성 create : 기존테이블 삭제 후 다시 생성(drop + create) create-drop : create와 같으나 종료시점에 테이블 drop update : 변경분만 반영 (추가만) validate : 엔티티와 테이블이 정상 매핑되었는지만 확인 none : 사용하지 않음 운영에서는 절대 create, create-drop, update 사용하면 안 된다. 개발 초기 단계는 create 또는 update 테스트 서버는 update 또는 validate 스테이징과 운영 서버는 validate 또는 none
[k8s] Kubernetes v1.26 세팅 가이드
Master 1대, Worker2대 기반으로 k8s clustering 진행 1. Kubernetes 구성 요소 버전 CRI : Docker Docker version: v20.10.22 Containerd version : v2.0 CNI : Calico v0.3.1 Kubectl: v1.26.0 2. Virtal Machine 정보 AWS: t3.medium Virtual Machine OS: Ubuntu 20.04 (해당 가이드는 Ubuntu 22 버전에서 오동작) TCP 개방 요구사항 22, 80 : ssh, http 기본 port 443, 6443, 2379 : k8s apiserver, etcd 활용 port 179, 5473 : Calico 활용 port UDP 개방 요구사항 51820, 5..