분류 전체보기 119

RequestBody VS ModelAttribute의 차이

RequestBody와 ModelAttribute는 클라이언트에서 보낸 데이터를 Java 객체로 만드는데 RequestBody는 Body에 있는 값을 바인딩할 때 사용하고, ModelAttribute는 파라미터나 multipart/form-data를 바인딩할 때 사용한다. RequestBody클라이언트가 보내는 요청의 본문을 자바 객체로 변환한다.내부적으로 HttpMessageConverter를 거치는데 ObjectMapper를 통해 JSON값을 java 객체로 역직렬화한다.그래서 변환될 java 객체에 기본 생성자가 필요하고, setter를 선언해야 한다. getter는 선택적으로 필요하다. ModelAttribute클라이언트에서 보내는 요청의 파라미터나 multipart/form-data 형식의 데이..

기술면접 2025.06.20

@Value 어노테이션

@Value는 설정 파일에 설정한 값을 주입할 수 있는 어노테이션이다. 주의해야 할 점은 주입 시점이다. @Value어노테이션은 대상 컴포넌트가 스프링 빈으로 등록되고 의존관계를 주입할 때 동작한다.그래서 대상 클래스에 @Component 어노테이션을 붙여주지 않으면 클래스는 컴포넌트 스캔대상이 되지 않아 스프링 빈으로 등록되지 않고 @value가 동작하지 않는다. @value어노테이션을 사용할 때 필드주입, 생성자 주입, setter, 등 방식을 고려해서 사용해야 한다.그리고 application.yml에 존재해야 하고, 여러개일 경우 우선순위를 고려해야 한다.

기술면접 2025.06.12

싱글톤 패턴

싱글톤 패턴(Singleton Pattern)은 생성자를 여러 차례 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미한다.객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환한다.간단히 말해서 어떤 클래스든 인스턴스를 딱 하나만 만들고, 어디서든 그 하나에만 접근하도록 보장하는 방법이다. 마치 한 회사에 CEO가 한 명만 있는 것처럼 특정 역할을 담당하는 객체가 시스템 전체에서 단 하나만 존재해야 할 때 사용한다. 싱글톤 패턴을 사용하여 객체를 여러 상황에서 재사용 할 수 있기 때문에 메모리 낭비를 방지할 수 있다. 그리고 여러 다른 객체가 하나의 인스턴스에 쉽게 접근할 수 있어 편리하다. 개발을 하다 보면 여러 상황이 생긴다.설정값을 관리할 때 applicati..

기술면접 2025.06.05

nginx 설정

goddady에서 도메인 구매 후 DNS설정해 주었다.goddady DNS 관리에서 A 레코드를 추가해 준다DNS 레코드에서 @와 www는 서로 다른 도메인을 가리키는 호스트명이다.@(루트 도메인)도메인 자체를 의미한다(ex:example.com)사용자가 example.com으로 접속할 때 사용www(서브도메인)www.example.com을 의미한다.실제로는 @: example.com에 접속 시 사용되고 www는 www.example.com 접속시 사용된다. 일반적으로 두 레코드 모두 설정해 준다. ssh에서 Nginx설치 후 설정을 해주어야 한다.sudo vi /etc/nginx/sites-available/{domain} domain부분에 사용하는 도메인을 넣어 설정파일에 접근한다.이 설정파일에서 H..

coding 2025.05.30

Gradle

Gradle은 JVM에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구이다. 기존의 Maven의 단점을 보완되어 설계되었다.Groovy나 Kotiln DSL을 사용해서 빌드 스크립트를 작성할 수 있다. 빌드 자동화 도구를 사용하면 일관된 빌드 환경을 제공받을 수 있어 어떤 환경에서도 동일한 결과를 얻을 수 있다.그리고 빌드 후 패키징, 배포까지 연속적으로 처리할 수 있다. Spring boot를 사용할 때 보통 maven과 gradle을 선택했었는데 Gradle을 많이 사용한다.두 빌드도구의 가장 큰 차이는 빌드 스크립트 작성 방식과 빌드 속도이다. Maven은 XML기반이고, Gradle은 Groovy를 사용해서 가독성이 더 좋고, 훨씬 빠르게 동작한다.

기술면접 2025.05.08

널 오브젝트 패턴 Null Object Pattern

널 오브젝트 패턴(Null Object Pattern)이란 객체가 존재하지 않을 때, 널을 전달하는 것이 아니라 아무것도 하지 않는 객체를 전달하는 방법이다. 보통 null 체크할 때 null일 경우 예외처리를 통해 Exception을 던지도록 개발하는 경우가 많은데,이렇게 사용하면 코드가 반복되고, 복잡해질 수 있다. 예시 처럼 아무것도 반환하지 않는 객체로 다루어서 간소화한다. 하지만, 실제로 오류가 발생해야 하는 상황에서 문제점을 찾을 때 어려움을 겪을 수 있기 때문에 주의해야 한다.

기술면접 2025.05.06

열 기반 DB와 행 기반 DB

행 기반 데이터베이스(Row-oriented Database)는 데이터를 행 단위로 관리하는 DBMS다.행 단위의 읽기, 쓰기 연산에 최적화되어있는데 Postgre, Mysql이 대표적이다. 열 기반 데이터베이스(Column-oriented Database)는 열 기반으로 데이터를 관리한다.데이터 조회 시 열(Column)을 로드하기 때문에 디스크 I/O를 줄일 수 있고, 같은 종류의 데이터가 연속적으로 저장되므로 압축 효율이 좋다.이 특징으로 데이터 분석에 사용된다.BigQuery, Redshift, Snowflake가 대표적이다. 행 기반 데이터베이스인 경우 관리는 다음과 같다. 열 기반 데이터베이스의 경우 아래와 같다. 선택은 주로 데이터 접근 패턴과 워크로드 특성에 따라 결정된다고 한다.

기술면접 2025.05.01

페이지교체 알고리즘

페이지 교체 알고리즘은 운영체제에서 가상 메모리 관리를 위해 사용되는 기법이다.메인 메모리(RAM)가 가득 찼을 때 새로운 페이지를 가져오기 위해 어떤 페이지를 교체해야 할지 결정하는 알고리즘이다. 1. FIFO(first in first out)먼저 들어온 게 먼저 나가는 알고리즘이다.가장 오래된 페이지를 교체하는데, 여기서 단순히 먼저 적재되었다는 이유로 교체된다는 비효율을 개선하기 위해 2차 기회 페이지 교체 알고리즘이라고 count를 세어 기회를 주었을 때 2차인 경우에 교체하는 알고리즘이 존재한다. 2. OPT알고리즘(Optional)가장 오랫동안 사용되지 않을 페이지를 교체한다.페이지의 미래 사용 빈도와 참조를 예측해야 돼서 실제 구현은 불가능한데 이론적으론 최적이다.다른 알고리즘의 비교 대상..

기술면접 2025.04.29

SSH 접속 안됨

잘 되던 gcp 서버가 갑자기 ssh접속이 안되었다.갑자기 안될 리가 없어서 몇 번을 다시 시도해 봤는데 그대로 접속이 안되었다.. 내가 뭘 잘못만졌나 생각하다가 ssh연결과정에서 -v 옵션으로 로그를 보기로 했다.-v 옵션은 verbose의 약자로 ssh연결에서 디버깅 정보를 볼 수 있다. 로그를 보니 ssh 초기연결을 되었는데(connection established) 이후 과정에서 중단되었다.다른 블로그를 보니 ssh 설정이 변경되면 이럴 수 있다는데 코드 수정과 배포 이외에는 설정을 만진 기억은 없어서 막 찾아보았다. 블로그 찾아보다가 인스턴스에서 로그를 볼 수 있다고 해서 vm로그 살펴보기로 들어가 시간대의 로그를 보았다.인스턴스에서 ssh키가 만료되었다고 나왔다. 나는 ssh키를 새로 발급받아..

coding 2025.04.29

PRG 패턴

RPG 패턴은 Post/Redirect/Get 패턴의 약자로, 웹 애플리케이션에서 폼 제출 후 페이지 새로 고침이나 브라우저 뒤로 가기 등의 문제를 방지하기 위해 사용하는 디자인 패턴이다. Post : 사용자가 폼을 제출하면 post요청이 서버로 전송된다.Redirect: 서버는 데이터를 처리한 후 사용자를 다른 페이지로 리다이렉트 한다. -> 302 상태코드 사용Get: 사용자의 브라우저는 리다이렉트를 따라 GET요청으로 새로운 페이지를 요청한다.일반적으로 PRG패턴은 멱등성이 보장되지 않는 POST요청에 사용된다. 예를 들어, 사용자가 주문 버튼을 클릭하고 새로고침을 수행하면 post요청이 2번 서버로 전달된다.이 상황에서 PRG패턴이 주로 사용된다. PRG패턴을 사용해서 중복 폼 제출과 '뒤로'버튼..

기술면접 2025.04.25