카카오

카카오톡, 다음, 카카오맵, 멜론

개발팀 리뷰

위 내용은 카카오 전 • 현 재직자의 응답 결과입니다.

기술 스택

언어

javascript

Java

Kotlin

프론트엔드

Angular

ReactJS

Redux

백엔드

NestJs

Spring

SpringBoot

데이터베이스

PostgreSQL

Redis

mongodb

데브옵스

Argo CD

Jenkins

OpenEBS

재직자가 작성한 글

profile picture

이준

카카오 플랫폼 기획

"discovery와 delivery 중에 어느 쪽에 강하신가요?"

다른 회사 제품 관리자에게 이런 질문을 받은 적이 있었는데 기분이 좋더라구요. 일단 그분이 이 프레임을 알고 있다는 게 말이 통하는 느낌이라 좋았고, 서로 커리어에 대해선 긴 시간의 대화를 줄일 수 있어서 좋기도 했습니다. 이상적인 제품팀은 이 둘을 밸런스 있게 끌고 가지만 많은 경우 discovery는 의사결정권자, delivery를 실무자의 몫이라고 생각하는 것 같아요. delivery 단계에 들어가면 discovery는 끝난 것이라고 보기도 하고요. 링크한 아티클에서 제시한 다이어그램이 아래처럼 간명한 인사이트를 담고 있어서 따로 떼서 붙였습니다. * 제품의 4가지 리스크를 discovery - delivery 과정 전체에서 관리해야 한다는 것 * 제품의 이터레이션이 반복되는 동안 비율은 다르지만 여전히 discovery - delivery가 유지돼야 한다는 것 여튼 저는 강 건너편에서 완벽한 discovery가 이뤄져야 하고 과제가 넘어왔으면 돌아가지 않아야 한다는 식의 제품 관리 방식에 알레르기가 있습니다. 더 좋은 discovery가 일어날 수 있도록 delivery 단계로 넘어가보자고 하는 쪽이고.. 나쁠 수도 있는 취향인 걸 알고 있습니다.ㅎ https://wind4change.com/product-management-discovery-delivery-inspired-empowered-marty-cagan/

profile picture

코드빌런

카카오 백엔드 개발자

책 출간 세미나를 합니다.

안녕하세요. 한빛미디어에서 (홍대입구역 한빛 리더스홀) 4월 20일 오후 두시에 취업/이직 가이드 세미나를 합니다. 취업/이직에 관심을 두고 계신 주니어 개발자를 대상으로 하고 있습니다. 접수 링크는 https://event-us.kr/FKH3nHkjmPGh/event/80465 입니다. 많은 관심 부탁드립니다.

재직자가 좋아한 글

Spring 면접 전 살펴보기 위한 Q&A 35가지 (2024년 ver)  |   1. 스프링 프레임워크란 무엇인가요? * 자바 엔터프라이즈 애플리케이션 개발을 위한 가장 널리 사용되는 프레임워크입니다. * 경량화, 제어 역전(IOC), 관점 지향 프로그래밍(AOP), 트랜잭션 관리 등의 기능을 제공합니다. 2. 스프링을 사용하면 어떤 장점이 있나요? * 경량화로 프레임워크로 인한 개발 오버헤드가 적습니다. * IoC 컨테이너가 객체 간 의존성 주입을 관리해줍니다. * AOP로 핵심 로직과 시스템 서비스를 분리할 수 있습니다. 3. 대표적인 스프링 하위 프로젝트들은 무엇인가요? * 스프링 코어: IoC/DI 등 프레임워크 핵심 기능 제공 * 스프링 JDBC: JDBC 코딩 없이 DB 연동 기능 * 스프링 ORM: JPA, Hibernate 등의 ORM 연동 계층 * 스프링 웹: 파일 업로드, 서블릿 리스너 등 웹 관련 기능 * 스프링 MVC: MVC 아키텍처 웹 개발 모듈 * 스프링 AOP: AOP 구현 및 메소드 인터셉터 정의 4. 의존성 주입(DI)이란 무엇인가요? * 객체를 직접 생성하지 않고, 생성 방법을 기술하면 IoC 컨테이너가 필요할 때 인스턴스화해서 주입하는 개념입니다. 5. 스프링에서 빈을 주입하는 방식에는 어떤 것들이 있나요? * Setter 주입 * 생성자 주입 * 필드 주입 * XML 또는 애노테이션으로 설정 가능 6. 빈 주입 방식 중 권장되는 방식은 무엇이고 그 이유는 무엇인가요? * 필수 의존성은 생성자 주입, 선택적 의존성은 Setter 주입을 권장합니다. * 생성자 주입을 사용하면 immutable 필드에 값 주입이 가능하고 테스트가 용이해집니다. 7. BeanFactory와 ApplicationContext의 차이점은 무엇인가요? * BeanFactory는 빈 인스턴스를 제공하고 관리하는 컨테이너 인터페이스입니다. getBean()이 호출될 때 lazy하게 빈을 생성합니다. * ApplicationContext는 BeanFactory를 상속하면서 애플리케이션의 모든 정보, 메타데이터, 빈을 담고 있는 컨테이너 인터페이스입니다. 기본적으로 애플리케이션 구동 시점에 eager하게 빈을 생성합니다. 8. 스프링 빈이란 무엇인가요? * 스프링 IoC 컨테이너에 의해 인스턴스화, 관리되는 자바 오브젝트를 말합니다. 9. 스프링 프레임워크에서 빈의 기본 스코프는 무엇인가요? * 별도 설정이 없다면 스프링 빈은 singleton 스코프로 생성됩니다. 10. 빈의 스코프는 어떻게 지정할 수 있나요? * @Scope 애노테이션이나 XML 설정 파일에서 "scope" 속성을 사용해 지정할 수 있습니다. * 스프링에서 지원하는 빈 스코프에는 다음과 같은 것들이 있습니다. * singleton * prototype * request * session * global-session 11. 싱글톤 빈은 스레드에 안전한가요? * 아니오. 싱글톤 빈 자체는 스레드 세이프하지 않습니다. * 스레드 안전성은 빈의 실행 방식에 달려 있고, 싱글톤은 생성 방식에 초점을 둔 디자인 패턴입니다. * 빈의 구현 코드에 따라 스레드 안전성이 결정됩니다. 12. 스프링 빈의 생명주기는 어떻게 되나요? * 빈 정의를 읽고 인스턴스화 → 의존성 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 콜백 메소드 호출 → 빈 소멸 * 각 단계별로 초기화 메소드, 소멸 메소드 등을 빈에 적절히 설정해서 사용할 수 있습니다. 13. 스프링 자바 기반 설정이란 무엇인가요? * XML 기반 설정의 대안으로, 자바 클래스와 애노테이션을 사용해 설정하는 방식입니다. * 타입 세이프한 방식으로 스프링 애플리케이션 구성이 가능합니다. 14. 하나의 프로젝트에 여러 개의 스프링 설정 파일을 사용할 수 있나요? * 네, 가능합니다. 큰 프로젝트에서는 모듈화와 유지보수성을 위해 여러 개의 설정 파일 사용이 권장됩니다. * 자바 기반 설정에서는 @Configuration과 @Import 애노테이션을 사용해 여러 설정 클래스를 조합할 수 있습니다. * XML 기반 설정에서는 <import> 태그를 사용해 여러 XML 파일을 조합할 수 있습니다. 15. 스프링 시큐리티란 무엇인가요? * 스프링 기반 애플리케이션의 인증과 권한 부여 등 보안 기능을 담당하는 프레임워크입니다. * 스프링 시큐리티를 사용하면 인증/인가 관련 표준 로직을 작성하지 않아도 되고, CSRF 공격 등을 방어할 수 있습니다. * 웹 애플리케이션에 @EnableWebSecurity 애노테이션만 붙여주면 기본적인 웹 보안 기능이 작동합니다. 16. 스프링 부트란 무엇인가요? * 스프링 기반 애플리케이션을 빠르게 개발할 수 있게 도와주는 프로젝트입니다. * 단독 실행 가능한 스프링 애플리케이션을 쉽게 생성할 수 있습니다. * 내장 서버, 자동 설정, starter 의존성 등으로 최소한의 설정으로 개발을 시작할 수 있습니다. 17. 스프링 프레임워크에서 사용되는 디자인 패턴에는 어떤 것들이 있나요? * 싱글톤 패턴: 싱글톤 스코프의 빈 * 팩토리 패턴: BeanFactory 클래스 * 프로토타입 패턴: 프로토타입 스코프의 빈 * 프록시 패턴: 스프링 AOP * 템플릿 메소드 패턴: JdbcTemplate, HibernateTemplate 등 * 프론트 컨트롤러 패턴: 스프링 MVC의 DispatcherServlet * 데이터 접근 오브젝트(DAO) 패턴: 스프링 DAO 지원 18. 프로토타입 스코프는 어떻게 동작하나요? * 프로토타입 스코프로 정의된 빈은 매번 getBean() 메소드가 호출될 때마다 새로운 오브젝트를 생성해서 반환합니다. * 이는 기본인 싱글톤 스코프와 대조적입니다. 싱글톤은 IoC 컨테이너당 하나의 오브젝트만 생성합니다. 19. 스프링 빈에서 ServletContext와 ServletConfig 객체는 어떻게 얻나요? * 스프링에서 제공하는 Aware 인터페이스들을 구현하는 방법이 있습니다. * @Autowired 애노테이션을 사용해서 주입받는 방법도 가능합니다. 20. 스프링 MVC의 컨트롤러란 무엇인가요? * 스프링 MVC에서 사용자의 요청을 처리하는 컴포넌트입니다. * @Controller 애노테이션이 붙은 클래스가 컨트롤러의 역할을 합니다. * 컨트롤러 클래스의 메소드는 @RequestMapping 애노테이션으로 매핑된 특정 URI를 처리합니다. 21. @RequestMapping 애노테이션은 어떻게 사용하나요? * 요청 URL을 컨트롤러의 메소드와 매핑할 때 사용하는 애노테이션입니다. * URL 패턴 외에도 HTTP 메소드 타입, 헤더, 파라미터 등을 매핑 조건으로 지정 가능합니다. * @PathVariable을 통해 URL 템플릿 변수를 메소드 파라미터로 받을 수 있습니다. * @RequestParam을 통해 HTTP 요청 파라미터를 메소드 파라미터로 받을 수 있습니다. 22. 스프링 JDBC의 JdbcTemplate 클래스는 무엇이고 어떻게 사용하나요? * 스프링에서 JDBC 프로그래밍을 쉽게 할 수 있도록 제공하는 템플릿 클래스입니다. * 리소스 생성, 해지 등의 low-level 작업을 대신 처리해줍니다. * SQLException을 스프링 DataAccessException으로 변환하는 기능도 제공합니다. * JdbcTemplate을 사용하려면 DataSource를 스프링 설정 파일에 등록해야 합니다. 23. 스프링에서 트랜잭션은 어떻게 사용하고, 어떤 이점이 있나요? * 선언적 트랜잭션(@Transactional)과 프로그래밍적 트랜잭션(TransactionTemplate) 두 가지 방식을 제공합니다. * 선언적 트랜잭션은 코드 침투가 없고 AOP를 사용하기 때문에 권장됩니다. * 트랜잭션 전파, 격리 수준, 읽기 전용 등을 애노테이션 속성으로 제어할 수 있습니다. * 트랜잭션 경계를 메소드 단위로 설정할 수 있어서 productivity가 높아집니다. * 다양한 데이터 접근 기술에 대해 일관된 트랜잭션 제어가 가능합니다. 24. 스프링 DAO란 무엇인가요? * Data Access Object의 약자로, 데이터 접근을 추상화한 객체입니다. * 스프링은 일관성 있는 DAO를 작성할 수 있도록 다양한 기능을 제공합니다. * 저수준 예외를 스프링의 통일된 예외 체계로 변환해줍니다. * 템플릿 클래스를 통해 boilerplate 코드를 제거할 수 있습니다. 25. AOP(Aspect-Oriented Programming)란 무엇인가요? * 관점 지향 프로그래밍이라고 하며, 스프링의 핵심 기능 중 하나입니다. * 여러 객체에 공통으로 적용될 수 있는 기능(cross-cutting concern)을 분리해서 모듈화합니다. * 주로 로깅, 트랜잭션, 보안 등 인프라 레벨의 공통 기능을 구현하는데 사용합니다. * AOP를 통해 객체 간 결합도를 낮추고, 코드 재사용성을 높일 수 있습니다. 26. AOP에서 Aspect, Advice, Pointcut, JoinPoint란 무엇인가요? * Aspect: 여러 객체에 공통으로 적용되는 공통 관심사(cross-cutting concern)를 모듈화 한 것입니다. 트랜잭션 관리 등이 대표적입니다. * Advice: 특정 JoinPoint에서 Aspect에 의해 취해지는 조치입니다. Around, Before, After 등의 타입이 있습니다. * Pointcut: Advice가 적용될 JoinPoint를 선별하는 조건입니다. 주로 정규 표현식으로 표현합니다. * JoinPoint: Advice가 적용될 수 있는 위치입니다. 메소드 호출, 예외 발생 등이 있습니다. 27. AOP의 Weaving이란 무엇인가요? * Aspect를 타깃 객체에 적용해서 새로운 프록시 객체를 생성하는 과정을 말합니다. * 즉, Advice를 핵심 로직 코드에 삽입하는 과정입니다. * 컴파일타임, 로딩타임, 런타임에 적용할 수 있는데, 스프링 AOP는 런타임 위빙을 사용합니다. 28. 리액티브 프로그래밍이란 무엇인가요? * 데이터 흐름과 변경 전파에 중점을 둔 프로그래밍 패러다임입니다. * 주요 특징으로는 논블로킹(non-blocking), 이벤트 기반(event-driven), 느슨한 결합(loosely coupled), 확장성(scalable) 등이 있습니다. * Observer 패턴을 확장해서, 데이터 스트림을 비동기적으로 처리합니다. * 스프링에서는 5.0 버전부터 WebFlux를 통해 리액티브 프로그래밍을 지원하고 있습니다. 29. 스프링 WebFlux란 무엇인가요? * 스프링 5.0에서 추가된 리액티브 웹 프레임워크입니다. * 기존의 스프링 MVC와는 별개의 모듈로서 완전한 논블로킹 방식으로 동작합니다. * 네티(Netty)를 기반으로 동작하며, 서블릿 컨테이너에서도 동작 가능합니다. * 함수형 프로그래밍 방식을 지원하며, Mono와 Flux 타입을 사용해 리액티브 데이터 타입을 표현합니다. 30. Mono와 Flux란 무엇인가요? * 스프링 5의 리액티브 프로그래밍에서 사용되는 핵심 객체 타입입니다. * Mono는 0-1개의 데이터를 발행하는 Reactive Stream 구현체입니다. * Flux는 0-N개의 데이터를 발행하는 Reactive Stream 구현체입니다. * 모두 Reactive Stream 표준 인터페이스인 Publisher를 구현하고 있습니다. 31. WebClient와 WebTestClient는 각각 어떤 용도인가요? * WebClient는 스프링 WebFlux에서 제공하는 논블로킹 방식의 리액티브 HTTP 클라이언트입니다. * HTTP 요청을 비동기적으로 처리하며, Mono나 Flux를 사용해 응답을 받을 수 있습니다. * WebTestClient는 WebFlux 애플리케이션을 테스트할 때 사용하는 클라이언트입니다. * 실제 서버를 띄우지 않고도 mock request/response를 사용해 컨트롤러 테스트를 할 수 있습니다. 32. 리액티브 스트림 사용 시 주의할 점은 무엇인가요? * 리액티브 프로그래밍은 기존 방식과 사고의 전환이 필요해 진입장벽이 높습니다. * 리액티브 스트림을 디버깅하기 쉽지 않기 때문에 디버깅 방식에 대한 학습이 필요합니다. * 전통적인 JDBC 기반 DB 드라이버는 리액티브 방식을 지원하지 않아 사용에 주의가 필요합니다. 33. 스프링 5에서 리액티브 프로그래밍을 지원하기 위해 최소 자바 버전이 올라갔나요? * 네, 맞습니다. 스프링 5는 자바 8 이상에서만 동작합니다. * 자바 8의 람다, Stream API, CompletableFuture 등을 활용하기 위해 최소 사양을 올린 것으로 보입니다. 34. 스프링 5는 자바 9의 모듈 시스템(Jigsaw)을 어떻게 지원하나요? * 스프링 5의 프레임워크 라이브러리들은 자바 9 모듈 시스템을 따르도록 변경되었습니다. * 그래서 필요한 모듈만 선택적으로 가져올 수 있게 되었습니다. * 하지만 스프링 부트 2.0에서는 아직 자바 9 모듈을 완벽하게 지원하지 않습니다. 35. 스프링 MVC와 WebFlux를 함께 사용할 수 있나요? * 스프링 부트에서는 현재 둘 중 하나만 선택해서 사용하는 것을 권장합니다. * 왜냐하면 둘 다 사용하면 자동 설정이 제대로 동작하지 않기 때문입니다. * 또한 스프링 MVC는 서블릿 기반인 반면 WebFlux는 네티 기반이라 함께 사용하기에 적절치 않습니다. 출처 : https://www.baeldung.com/spring-interview-questions

좋아요 468 저장 1164

thumbnail