기술면접 관련 및 참고하기 28

Test Code 2부

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

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

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

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)가 뭔지 알아보고 지금 진행중인 프로젝트에 적용해보려고 한다. 사실 도커 사용에 앞서 굉장히 많은 고민을 했다. 그 이유인 즉슨 우리가 지금 사용하고 있는 프로젝트에 도커를 적용하는 것이 바람직한가?에 대해 생각을 많이 해봤다. 현재까지도 도커없이 프로젝트가 잘 진행중이며 갑자기 잘 돌아가는 프로젝트의 일부분을 도커에 올려서 사용할 필요성을 못느꼈기 때문에, 굳이 도커를 사용해야하나? 라는 생각에서 시작되었다. 이러한 고민 와중에 ..

[ 10분 테코톡 ] - Stream 그리고 For Loop

🤥개요 들어가기 일반적으로 우리는 데이터를 탐색하고자 할 때, 반복문을 사용할 것이다. 그러나 루프가 길어지고 주어진 조건식이 많아진다면 당연히 이 루프속 내용은 많아질 것이고, 가독성 또한 떨어지며 코드의 재사용도 힘든데 이러한 문제점을 해결하기 위해 Java 8 버전부터 Steam(스트림)이라는 개념을 지원해준다. 어떻게하면 우리는 이 Steam을 잘 활용할 수 있을까에 대한 고민을 담은 글이다.? 스트림을 왜 써야할까? 등 Stream의 내용을 학습하고, 내가 고민한 내용을 바탕으로 적용해보기 위해서 정리한 글이다. 본 글은 구글링 및 10분 테코톡 11강, 12강 Stream에 관련한 영상을 시청 후 정리한 내용이다. 본 내용에서 사용한 사진은 테코톡에서 발췌한 사진임을 명시한다. 본 글은 왜 이..

불변 객체(Immutable Object) 그리고 DTO(Data Transfer Object)

자바 혹은 스프링을 공부하다보면 뭐 String은 Immutable하다. 불변 객체이다 등 불변이라는 단어를 자주 들어봤을 것이다. 이러한 내용 속에서 습득하고, 익힌 정보들은 다음과 같다. 객체 지향 프로그래밍에서 정의하는 불변 객체(Immutable object)는 다음과 같다. 1. 불변 객체 ( Immutable Object ) 불변 객체는 생성 후 상태를 바꿀 수 없는 객체를 말한다. ( 반대 개념은 가변 객체 ) 불변 객체의 장점은 다음과 같다 조작의 단순화 성능 개선 많은 객체 지향 언어들에서 객체는 참조(reference) 형태로 전달하고 받는다. 그래서 이 참조를 통해 공유돼어 있다면 그 상태가 언제든지 변경될 가능성이 존재한다. 불변 객체는 객체를 복제할 때 객체 전체가 아니라 단순히 ..

나의 고찰 1 - 백엔드 입장에서 보는 유의미한 데이터란?? (봉투패턴)

웹에선 HTTP 통신 프로토콜을 이용해 서버와 클라이언트 사이에서 통신을 한다. 그 프로토콜등을 이용해 우리는 원하는 데이터를 전달받을 수 있는데, 이러한 과정 속에서 궁금한 점이 생겼다. 우리는 그저 프론트에서 요청하는 데이터를 정확하게 전달해주면 백엔드는 그 역할이 끝났다고 생각한다. 원하는 데이터에 대한 로직을 검증하고 수행하는 역할은 백엔드에서 진행하고, 그 결과에 맞춰 프론트가 요청하는 데이터를 전달해주면 된다. 그럼 프론트 입장에서는 프론트로 전달되는 데이터들은 유의미한 데이터이며, 유의미해야만 한다고 생각이 들었다. 기존에 미니 프로젝트나 명세가 있으면 요구하는 데이터를 전달하면 되는데, 만약 그것이 없다면 어떤 데이터를 전달해야할까? 백엔드는 결국 요청에 대한 응답을 진행하는 거니까? 이 ..

웹 애플리케이션의 이해

웹서버? 웹 애플리케이션 서버? was 한 개만으로 운영을 하다보면 서버의 과부하의 우려 그래서 오류 발생 시 오류 화면도 노출이 불가능하다. (오류에 대한 부담이 커진다 ) 그래서 정적 리소스는 웹 서버가 처리해버리고, 애플리케이션 로직같은 동적 처리가 필요하면 was에 요청 (이로 인해서 효율적인 리소스 관리가 가능) 공통점 : HTTP를 기반으로 동작한다는 점 차이점: 웹 서버 -> 정적 리소스 제공, 그래서 특정 사용자에게 다르게 보여주는 방식이 불가. (파일 - 정적 리소스) WAS는 웹 서버의 기능을 포함하며, 프로그램 코드를 실행해서 애플리케이션 로직을 수행 가능 (애플리케이션 로직 수행) 서블릿(Servlet) 전체적인 흐름 : 사용자가 url에 요청을 함 -> was 서버에서 요청 메시지..