본문 바로가기

SW 공부

[Jackson] 상속관계 deserializing @JsonTypeInfo 인터페이스나 추상클래스를 이용하여 다형성을 구현한 경우, 실제 클래스가 무엇인지 알려주는 설정을 하는 어노테이션 json type 이라는 메타정보를 생성하여 사용하고 이 메타정보는 json 에 추가 프로퍼티로 들어간다. 이 추가 프로퍼티는 직렬화에 관여되지 않는다. 속성으로 ID, AS, property 를 갖는데, 이것은 사용예시를 보면서 하나씩 보자. 1. @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) // @class 라는 추가 프로퍼티가 생기고 패키지.클래스명으로 값이 자동으로 세팅됨 // @JsonSubTypes 을 안줘도 자동으로 서브 클래스를 등록한다.(이건 확인 필요) @JsonTypeInfo(use = JsonTypeInfo.Id.C.. 더보기
[Kotlin] 코루틴 기초 kotlinlang.org/docs/coroutines-overview.html Coroutines - Help | Kotlin kotlinlang.org 코루틴에 앞서 suspend 함수 - suspend fun 은 중단점(다른 suspend fun 호출)을 가지는 함수, 중단점이 없다면 suspend fun 의 의미가 없을듯 - 보통의 함수는 시작하고 1번만 반환한다. - suspend fun 은 코루틴 안에서 동작할 때 중단점에서 반환되고 다시 중단점 이후부터 실행되고를 반복한다. - suspend fun 은 컴파일에 의해 Continuation passing style 로 변환된다. 별다른건 아니고 일반적인 코드형태 - suspend fun 의 마지막에 continuation 이라는 인터페이스를 .. 더보기
[Ssh] ssh 키를 이용하여 로그인하기 ssh를 이용하여 서버에 연결하기 위해서는 id/pw 또는 key 가 필요하다. 아래에서는 key를 생성하고 교환하는 방식에 대해 알아본다. 1. key 생성 windows 에서는 puttygen, ubuntu 에서는 ssh-keygen 으로 공개키와 개인키 세트를 생성할 수 있다 개인키는 클라이언트가 공개키는 서버가 가진다. $> ssh-keygen // 이후 스크립트 설명에 따라 생성, 모르면 그냥 엔터하면 기본값으로 생성 2. 공개키 전송 $> scp ~/.ssh/id_rsa.pub 사용자ID@서버명:id_rsa.pub aws ec2 생성시에는 aws에서 키페어를 만들고 개인키는 다운로드 받고 공개키는 인스턴스의 authorized_key에 자동으로 들어간다. 3. authorized_keys 에 .. 더보기
[Redis] redis 를 이용한 global session 관리 기본개념 1. 쿠키/세션 : 서버와 클라이언트는 계속 연결되어 있지 않기 때문에 서버에 오는 모든 요청마다 클라이언트가 누구인지 확인해야 한다. 매 요청마다 로그인 하는 과정을 반복한다고 생각한다면 너무 비효율적이므로, 한번 로그인 하면 일정 기간 동안 유효한 자유이용권을 하나 발급해준다. 참고 interconnection.tistory.com/74 2. 세션이 외의 인증방법 - 세션은 별도의 저장소가 필요하므로 많아지면 문제다. 세션ID(토큰) 에 전체 내용을 담아서 사용하는 방법 JWT - 특정 서비스 외에 여러 서비스를 한번에 인증하여 사용하는 방법 OAuth 3. 대칭형, 비대칭형 암호화 - 대칭형은 1개의 키를 양쪽이 잘 주고 받아서 이 키로 암복호화를 하는 것, 키를 공유하는 과정에서 탈취당하.. 더보기
[Spring] service 테스트 작성 요령 0. 전체 순서 테스트 클래스 만들기 -> 사용할 프로퍼티 만들기 -> 테스트 함수 만들기 1. 테스트 클래스 만들기 @RunWith(SpringRunner::class) - JUnit 프레임워크의 테스트 실행 방법을 확장할 때 사용하는 애노테이션이다. @SpringBootTest - 스프링부트 통합테스트 하기 위해서 사용 ( 단위테스트에서는 사용하지 않음) service 테스트에서는 @SpringBootTest 없이 직접 serviceImpl 객체를 만들어서 사용 @ActiveProfiles("test") - 특정 profile 선택 @Autowired 로 의존성 주입을 받을 때 항상 동일한 빈에서만 받는게 아니고 profile 이라는 네임스페이스로 그룹화가 가능하다. 빈 등록할때 @profiles 라.. 더보기
[JPA] 복합키(Composite Key) 생성 및 관계 맺기 복합키 객체 생성 - 공통 : 엔티티 클래스의 PK 만을 속성으로 갖는 별도의 Composite Key 클래스가 있어야 한다. - @EmbeddedId 방식 : Composite Key 클래스를 정의하고 entity 클래스 내부에 직접 사용 @Entity data class TChild( @EmbeddedId var tChildIdL TChildId ) { val parentId get() = tChildIdL.parentId @MapsId("parentId") @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "parentId") lateinit var tParent: TParent } @Embeddable data clas.. 더보기
[JPA] OneToOne 테이블 설계와 JPA 매핑 테이블 설계 주어진 테이블은 사람테이블, 주소테이블 이고 사람테이블이 접근을 많이 하는 테이블이다. 현재는 1:1 관계이지만 사람:주소=1:N 으로 확장될 가능성이 존재한다. 1:1 로 매핑되는 테이블에서 FK를 어디에 둘것인가? 참고 https://ict-nroo.tistory.com/126 JPA 매핑 일반적인 경우와 마찬가지로 FK를 가지고 있는 연관관계의 주인 엔티티에서 OneToOne 단방향 매핑을 할 수 있다. 매핑된 테이블에서 mappedBy 를 이용하여 양방향 매핑도 가능하다. 지연로딩 FK를 가진 곳에서는 FK에 값이 있으면 연관관계 멤버에 프록시객체를 넣어주고 없으면 null을 넣어줄수 있지만 FK가 없는 반대 엔티티에서는 DB를 조회해야지만 알수 있기때문에 초기값 세팅을 위해 항상 D.. 더보기