전체 글 132

[항해 취업코스] 개발자 취준 기록 12일차

Q. Spring @ControllerAdvice 애너테이션의 동작 원리에 대해 자세히 설명해주세요. @ControllerAdvice 애너테이션을 사용하면 프로젝트의 @Controller 어노테이션이 있는 클래스에서 @ExceptionHandler로 등록한 예외가 발생하는 경우에 대해 처리할 수 있습니다. @ExceptionHandler는 사용하여 처리할 예외를 명시하고, 실행시킬 메서드를 정의하여 사용합니다. Q. Checked Exception과 Unchecked Exception에 대해 자세히 설명해주세요. 자바 예외 클래스 계층 구조로 보았을 때, RuntimeException의 하위 클래스들이 Uncheck Exception 이라 하고 하위 클래스가 아닌 Exception 클래스의 하위 클래스들..

CS 2024.03.22

[항해 취업 코스] 개발자 취준 기록 11일차

Q. DTO에 대한 설명과 함께 왜(?) Entity 인스턴스를 Client에 그대로 전달하면 안되는지에 대해 설명해주세요. Data Transfer Object는 계층 간의 데이터 교환을 위해 필요한 객체이다. 특히 클라이언트와 서버 간의 데이터 전송에 사용된다. 필요한 정보만을 DTO에 담아 최소한의 데이터 전송으로 필요한 작업을 수행할 수 있도록 도와줍니다. 보안 유지 : 엔티티에 민감한 정보가 포함되어 있을 수 있습니다. 때문에 DTO를 사용하여 클라이언트에 전달할 데이터를 필터링하여 보안을 유지할 수 있습니다. 응집도 향상 : DTO에 필요한 정보만을 담기 때문에 애플리케이션의 응집도를 향상시킵니다. 유연성 : 객체의 구조가 변경되더라도 DTO를 통해 데이터를 전송하면 클라이언트에 덜 영향을 줄..

CS 2024.03.21

[항해 취업코스] 개발자 취준 기록 10일차

Q. 테스트코드를 사용하지 않고 기능 테스트를 했던 경험을 상세하게 설명해주세요, 부족한 부분이 있었다면 어떠한 부분이 부족했는지 설명해주세요. 테스트 코드 없이 기능 테스트를 진행할 때, 새로운 브랜치를 만드는 등의 번거로움이 있었고, 특정 클래스만을 테스트하는 것이 아니라 전체 애플리케이션 로직을 실행해야 하는 불편함이 있었습니다. 이런 방식은 테스트의 범위를 세밀하게 조절하기 어렵고, 시간도 많이 소모되는 단점이 있습니다. Q. JPA의 더티체킹이 어떤 방식으로 동작하는지 설명해주시고, 만약 JPA를 사용하지 않는다면 어떤 식으로 개발을 하셨을 것 같으신가요? JPA의 더티 체킹은 트랜잭션이 커밋될 때 엔티티의 현재 상태와 최초 로딩 시점의 스냅샷을 비교하여 변경사항을 자동으로 DB에 반영합니다. ..

CS 2024.03.21

[항해 취업코스] 개발자 취준 기록 9일차

좋아요 기능과 팔로우 기능을 구현하기 위해 설계하신 DB Schema에 대해 자세히 설명해주세요. 좋아요 기능을 구현하기 위해 게시판에 대한 좋아요 테이블과 댓글 테이블에 대한 좋아요 테이블을 나누어 정의하였습니다. 그리고 각각에 대해 1 : N 연관관계로 설정하고 좋아요 테이블에 외래키를 두어 정의하였습니다. 팔로우 기능을 구현하기 위해 사용자 테이블에 대해 팔로우 테이블을 1 : N 연관관계로 설정하고 사용자 테이블에 대한 두 개의 외래키를 두어 정의하였습니다. 이러한 방식으로 정의를 하면 팔로우 테이블이 여러 사용자들 간의 관계를 연결시켜주는 브릿지 테이블 역할을 수행할 수 있습니다. API DOCS(e.g. Swagger)가 무엇인지 그리고 왜(?) 필요한지에 대해 설명해주세요. API DOCS는..

CS 2024.03.20

모의 면접 회고

1. 간단한 자기 소개(인성) 2. 어떤 코드를 지향하나요?(CS) → 하나의 클래스가 하나의 기능을 가지는 코드 → SRP 원칙에 준수한 코드가 깔끔한 코드인가요? → 좀 더 생각해보겠습니다. 3. 어떤 개발자가 되고 싶나요?(인성) → 사용자에게 즐거움, 편의성을 제공하는 개발자 → 이를 위해 어떤 노력을 하고 있나요? → 백엔드 개발자로서, 알고리즘과 디자인패턴에 대한 공부를 하고 있습니다. → 디자인 패턴을 활용한 경험이 있나요? → 학부 시절 디자인 패턴 수업을 들었던 경험과 우아한 테크 코스 프리 코스에서 싱글톤 패턴을 활용한 경험이 있습니다. → 싱글톤 패턴에서 double checked locking 아나요? → 공부해오겠습니다. 4. 관심 직무가 있으신가요? [프로젝트 관련] 4. 프로젝..

CS 2024.03.14

[항해 취업코스] 개발자 취준 기록 8일차

Q. 즉시로딩과 지연로딩은 각각 언제 사용하면 좋은지 설명해주실 수 있을까요? Q. Spring bean container 생성부터 스프링 종료까지의 사이클에 대해 알려주실 수 있을까요? @PostConstruct, @PreDestroy 어노테이션의 역할도 함께 알려주시면 좋습니다. 스프링 빈 : 스프링 IoC 컨테이너에서 인스턴스화하고 조립 및 관리하는 객체 스프링 IoC 컨테이너 : Spring Bean으로 알려진 객체를 인스턴스화, 구성 및 조립하고 생명 주기를 관리하는 역할 IoC : Inversion of Control의 약자, 제어의 역전 : 프로그램의 실행 흐름이나 객체의 생명 주기를 개발자가 제어하는 것이 아닌 외부에서 관리해주는 것 빈을 생성하는 것과 빈을 등록하는 것 빈 생성 : 스프링..

CS 2024.03.14

[항해 취업코스] 개발자 취준 기록 7일차

Q. HTTP 상태 코드 100번대, 200번대, 300번대, 400번대, 500번대에 대해 각각의 특징을 설명해주세요. 상태 코드 : 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational) : 요청이 수신되어 처리중 거의 사용되지 않는다. 2xx (Successful) : 요청 정상 처리 200 OK : 요청 성공 201 Created : 요청 성공해서 새로운 리소스가 생성됨 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음 예) 웹 문서 편집기에서 SAVE 버튼 save 버튼의 결과로 아무 내용이 없어도 된다. save 버튼을 눌러도..

CS 2024.03.14

[항해 취업코스] 개발자 취준 기록 6일차

Q. RDBMS의 index가 무엇인가요? 그렇다면 유니크키 FK는 index인가요? RDBMS에서 인덱스(Index)는 데이터베이스 테이블의 데이터를 빠르게 조회할 수 있도록 돕는 데이터 구조입니다. 인덱스는 검색 속도를 향상시키기 위해 사용되며, 내부적으로는 대부분 B-트리 또는 해시 테이블 구조를 사용합니다. 인덱스를 사용하면 특정 조건에 맞는 데이터를 빠르게 찾을 수 있지만, 인덱스를 유지하기 위한 추가적인 공간이 필요하고 데이터를 삽입, 삭제, 수정할 때마다 인덱스도 업데이트해야 하므로 성능 저하를 일으킬 수도 있습니다. 유니크키(Unique Key)와 외래키(Foreign Key, FK)는 인덱스의 일종으로 볼 수 있습니다. 유니크키는 테이블 내의 각 로우가 유일함을 보장하는 역할을 하며, 인..

CS 2024.03.14

[항해 취업코스] 개발자 취준 기록 5일차

Q. 세션 기반의 인증 방식과 토큰(JWT)기반의 인증 방식에 대해 설명해주세요. 세션 기반 인증 방식은 클라이언트에서 서버로 로그인 요청을 보낼 때, 서버가 해당 사용자의 인증 정보를 검증한 후 인증 성공 시 사용자의 세션 정보를 서버에 저장하고, 해당 세션의 고유한 식별자(세션 ID)를 클라이언트에게 반환합니다. 클라이언트는 이후의 요청에서 이 세션 ID를 서버에 전송하여 자신을 인증합니다. (문제점) 이러한 방식은 여러 대의 서버로 운영하는 경우, 처음 인증받은 서버와 다른 서버로 요청이 전달될 때, 해당 서버는 사용자의 세션 정보가 없어 인증을 실패하는 문제가 발생할 수 있습니다. (해결) 이 문제를 해결하기 위한 방법 중 하나는 세션 데이터베이스를 사용하는 것입니다. 세션 데이터베이스는 모든 서..

CS 2024.03.12

[항해 취업코스] 개발자 취준 기록 4일차

Q. Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요? A. Java의 Map 인터페이스는 주요한 구현체로 HashMap, TreeMap, LinkedHashMap 등이 있습니다. 이들의 내부 구현은 약간씩 다릅니다. HashMap의 경우, 배열과 연결 리스트, 그리고 Java 8 이후에는 트리도 사용하여 데이터를 저장합니다. 키와 값이 쌍으로 이루어진 엔트리를 배열의 인덱스에 매핑하고, 해싱 충돌이 발생할 경우 연결 리스트 또는 트리를 사용해 충돌을 관리합니다. TreeMap은 레드-블랙 트리라는 자료 구조를 사용하여 키-값 쌍을 저장합니다. 이를 통해 키를 기준으로 정렬된 순서를 유지하며, 검색, 삽입, 삭제 연산을 로그 시간에 할 수 있습니다. LinkedHashMap은..

CS 2024.03.08