분류 전체보기 188

기술 면접 스터디 1일차 - ( OOP, Rest api)

목차 1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 2. REST API란 무엇인가요? 1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 객체지향 프로그래밍이란? (Object-Oriented Programming, OOP) 객체지향 프로그래밍 oop는 객체의 관점에서, 객체라는 단위를 이용해 로직을 구성하는 방식을 말합니다. 여기서 말하는 객체는 프로그램의 동작의 주체가 되는 요소로, 서로 다른 객체 간 상호작용을 통해 프로그램을 구성합니다. 이 객체지향 프로그래밍은 3가지의 특징을 가지고 있습니다. (캡슐화, 상속, 다형성) 캡슐화 특정 행동이나 기능에 대해서 관련된 객체와 메서드 등을 하나로 묶을 수 있다...

Cascade Type의 종류, 그리고 의도

JPA에서는 영속성 전이(CASCADE)라는 개념을 지원해줍니다. 그럼 과연 영속성전이(CASCADE)란? 무엇인가요? 해석하자면 대상 엔티티에 대해 수행하는 작업들이 관련 엔티티에서도 작업이 적용된다는 것이다. JPA에서는 영속성 전이 타입 5가지를 지원해줍니다. ALL 상위엔티티에서 하위 엔티티로 모든 작업을 전파합니다. ( 모든 Cascade를 적용 ) PERSIST 하위 엔티티까지 영속성을 전달합니다. ( 엔티티를 영속화할 때, 연관된 엔티티도 함께 유지 ) MERGE 엔티티 상태를 병합할 때, 연관된 엔티티도 모두 병합 REMOVE 연결된 하위 엔티티까지 제거함 REFRESH 연결된 하위 엔티티까지 인스턴스 값 새로고침 ( 데이터베이스로부터 인스턴스 값 다시 읽어오기 ) DETACH 영속성 컨텍..

스프링/JPA 2023.03.22

Test Code 2부

과거 Test Code 관련해서 정리한 글이 있었다. 왜 Test Code가 필요하고, 어떻게 작성해야하며, 전반적인 내용을 가볍게 다뤘었다. 오늘은 테스트 코드 관련해서 조금 더 깊은 내용을 작성해보고자 한다. 과거 정리한 글 2022.12.27 - [독후감/자바 웹프로그래밍 Next Step] - Chapter 2 테스트와 리팩토링 2022.12.28 - [TIL(Today I Learned)] - Day.39 테스트 그리고 refactoring 일단 항상 코드를 작성하다보면 테스트코드를 짜야지 하지만, 이렇게 짜는 것이 맞나? 라는 물음을 스스로 해보았을 것이다. 나 역시 이번 프로젝트를 하면서 거의 테스트 코드를 작성하지 않았다. 나름대로의 이류를 들어보자면 다음과 같다. 테스트 코드를 작성할 기..

JPA 데이터베이스 초기화 전략 (5가지 )

jpa에서는 애플리케이션 구동시 JPA 데이터 베이스의 전략을 설정할 수 있습니다. 총 5개의 전략을 지원해줍니다. create : 기존 테이블 삭제 후 테이블 생성 create - drop : create와 같지만, 종료 시점에 테이블을 삭제 none : 사용하지 않음 update : 기존의 테이블과 비교해서 변경된 내용이 있으면 수정 (SessionFactory와 연결된 DB를 비교해서 추가된 항복은 추가, 같은 변수명이면 오류 발생 ) validate : 엔티티와 테이블 정상 매핑 확인 ( SessionFactory 시작 시 객체 구성과 스키마가 다르면 예외가 발생) 이렇게 5가지의 전략이 있습니다. 일반적으로 초기 개발이나 테스트 할 떄는 create, update, create-drop을 주로 ..

스프링/JPA 2023.03.22

SSR(Server Side Rendering) 그리고 CSR(Client Side Rendering)

과거에 웹 애플리케이션에 관해서 간단하게 공부를 진행한 적이 있다. 간단하게 복습하고 넘어가자 . 과거 정리 내용 : https://jipang9-greedy-pot.tistory.com/111 정적 리소스의 처리를 웹 서버에게, 애플리케이션 로직처럼 동적 처리는 was에, 이렇게 구성하면 효율적으로 리소스 관리를 할 수 있다. 서블릿의 흐름 ( Servlet ) 1) 사용자가 url에 요청 2) was 서버에서 요청 메세지를 기반으로 객체 생성 하고, 그 객체를 서블릿 컨테이너에 전달 (이 때 싱글톤 패턴 이용 - 하나의 객채만으로 생성-공유 ) 3) 그에 맞는 정보를 전달 was의 가장 큰 특징 : 동시 요청을 위한 멀티 쓰레드 처리 지원 멀티쓰레드 ? : 스레드는 애플리케이션 코드를 순차적으로 실행..

@Transactional 복습 그리고 더 나아가기 (readOnly)

복습 과거에 10분 테코톡을 보고 트랜잭션에 관련된 내용을 정리한 적이 있었다. 그 내용을 우선 다시 복기해보자. 일단 트랜잭션은 한 요청에 대한 작업 단위라고 생각하면 쉽다. 이 트랜잭션이 수행될 때, 중요한 부분이 내부 동작이였는데 DB 커넥션 풀을 이용해서 커넥션 객체를 가지고 오게되고, 이 객체를 이용해서 DB에 요청을 보낸다고 했다. DB 입장에서는 이 커넥션을 하나의 세션으로 생각할텐데 한 기능의 작업 단위를 묶지않으면, 결국 제 각각의 다른 커넥션으로 생각할 것이고, 이는 세션을 처리할 때, 개별 작업으로 처리해버릴 것이다. 그래서 우리가 원하는 기대 값이 나오지 아니할 가능성이 높다. 여기서 가장 중요한 점은 결국 우리가 만들고자 하는 기능을 작업 단위 즉 트랜잭션으로 묶어야 한다는 점이 ..

스프링/JPA 2023.03.11

Java 8 vs Java 11 ?

우리가 프로젝트를 진행하다보면 여러 라이브러리와 언어의 버전과 관련된 선택을 해야하는 경우가 발생합니다. 누군가는 버전업되면 다 좋은거 아니야? 라고 생각할 수있지만, 개발자들은 이를 하나하나 따져보고 적절한 trade off를 통해서 사용하고자 하는 도구들의 버전을 선택해야 한다고 생각합니다. 이 글은 자바의 버전 선택과 관련된 내용을 담고있습니다. Java라는 언어를 사용하는 사람들은 자바가 객체지향 언어인 것도 알고있고, 이식성의 장점이나 메모리를 자동으로 관리해주는 장점 등을 알고있다. 오늘은 이러한 부분을 넘어선 자바 8과 자바 11 버전을 비교해서 학습한 내용을 정리하려고 한다. 자바의 버전 현재까지 자바는 19버전까지 출시되어 있으며 올해 3월 20 버전이 출시된다고 알려저있다. 자바는 각 ..

JPA의 N+1 문제

사건의 발단은 이랬다. 어드민은 현재 모든 Thread를 조회해야하는 시점에서, 그냥 List를 그대로 호출해버리니 N+1 문제가 발생하였다. 사실상 어드민 기능에서는 성능적으로 크게 이슈가 없다 → 기존의 다른 서비스 같은 경우 어드민 기능을 하는 서버를 따로 띄운다. → 그래서 리소스 관련해서 크게 신경쓸 필요가 없는데 → 우리 서비스 같은 경우에는 한 서버에 다 띄우기에 만약에 다량의 쿼리가 발생해서 서버가 터져버리면? 이라는 생각으로 성능 개선을 해보려고 한다. 또한 어드민은 특정 사용자만 이용하기에 다른 서비스 기능에 비해선 크게 걱정할 필요가 없다고 생각한다. 하지만 기술적인 깊이와 코드에 깊이를 가지고, 직면한 문제를 직접 해결함으로써 성장하기 위해서 확인 차 기능을 제작했다. 현재로서는 데..

비관적 락 (Pessimistic Lock )vs 낙관적 락 (Optimistic Lock)

들어가기 낙관적 락 그리고 비관적 락 마무리 들어가기 개발을 하다보면 문득 이런 생각을 할 수 있다. 내가 데이터를 수정해야하는 상황이 생겼는데, 만약에 이 데이터와 관련해서 동 시에 충돌이 일어난다면 어떻게 해야할까? 어떻게 될까? 라는 고민을 해볼 수 있다. 대표적으로 동시성 문제인데, 예시를 들자면 서비스에 있는 좋아요 기능을 계속 누르게되면 찰나의 순간에 똑같은 데이터가 들어갈 여지가 생긴다. 이러한 상황 속에서 백엔드 개발자는 이러한 상황을 예측해서 개발을 진행해야 한다. 이러한 상황속에서 고민한 내용에 관한 학습 내용을 정리하고 기록하고자 한다. 일반적으로 우리는 예기치 못한 상황이 발생할 경우를 대비해서 "예외처리" 라는 것을 한다. 말 그대로 예외가 생겼을 때, next step으로 넘어갈..

도커(Dokcer)가 뭔데? 도커 사용기

들어가기 도커 알아보기 도커 사용하기 - 마무리 들어가기 개발자라면 누구나 한번쯤은 도커라는 단어를 들어봤을 것이라 생각한다. 물론 도커를 사용하지 않아도 서비스를 잘 구성할 수 있지만, 분명히 그 속에서 오는 많은 제약사항들이 존재할 것이다. 그래서 직접 도커 (Docker)가 뭔지 알아보고 지금 진행중인 프로젝트에 적용해보려고 한다. 사실 도커 사용에 앞서 굉장히 많은 고민을 했다. 그 이유인 즉슨 우리가 지금 사용하고 있는 프로젝트에 도커를 적용하는 것이 바람직한가?에 대해 생각을 많이 해봤다. 현재까지도 도커없이 프로젝트가 잘 진행중이며 갑자기 잘 돌아가는 프로젝트의 일부분을 도커에 올려서 사용할 필요성을 못느꼈기 때문에, 굳이 도커를 사용해야하나? 라는 생각에서 시작되었다. 이러한 고민 와중에 ..