2025 토스 NEXT 지원 후기
·
취준
들어가며이번에 열렸던 2025 토스 NEXT에 Server 직무로 지원했습니다. 결과적으로 마지막 문화적합성 면접에서 탈락했지만 얻은 게 많은 면접이어서 이를 계속 기억하기 위해 후기를 적습니다.배경저는 컴퓨터 공학 전공이지만 군대를 마치고 2학년때 전과를 한 케이스입니다. 그리고 전공 수업을 듣다가 정말 자바 문법만 알고 있는 상태로 작년에 우아한 테크 코스를 수료하고 현재 3학년을 다니며 SW 마에스트로를 병행하고 있습니다. 그렇기에 웹 개발을 작년에 시작하여 이제 막 2년 정도 했고 프로젝트는 우아한 테크 코스 프로젝트, 우아한 테크 코스 크루들과 하고 있는 프로젝트, SW 마에스트로 프로젝트 3개만 했던 상태입니다. 작년에는 토스 NEXT가 9월 말에서 10월 초에 있어서 이때까지 준비할려 했는데..
동기/비동기, 블로킹/논블로킹은 무엇이고 각각의 차이점은 무엇인가요?
·
CS
📝 면접 답변 보기 동기와 비동기는 '작업 결과를 누가 처리하냐'의 문제입니다.동기는 호출한 쪽에서 결과를 직접 받아서 처리하고, 비동기는 콜백이나 이벤트를 통해 나중에 별도로 처리됩니다. 블로킹과 논블로킹은 '제어권을 언제 돌려주냐'의 문제입니다.블로킹은 작업이 끝날 때까지 제어권을 반환하지 않아 대기하게 되고, 논블로킹은 작업 완료와 관계없이 즉시 제어권을 돌려줘서 다른 작업을 할 수 있습니다. 면접 질문 정리용 레포지토리https://github.com/unifolio0/backend-interview-study.git GitHub - unifolio0/backend-interview-studyContribute to unifolio0/backend-interview-study developmen..
@Async는 어떻게 동작하나요?
·
CS
📝 면접 답변 보기@Async는 스프링 AOP를 통해 동작합니다.스프링이 @Async가 붙은 메소드를 발견하면, 해당 클래스의 프록시 객체를 생성해서 빈으로 등록합니다.다른 빈에서 이 서비스를 주입받으면 실제로는 프록시 객체가 주입되고, 메소드를 호출하면 프록시 안에 있는 MethodInterceptor가 AsyncExecutionInterceptor를 실행합니다.AsyncExecutionInterceptor는 TaskExecutor를 사용해서 새로운 스레드에서 실제 메소드를 실행하고, 호출한 쪽에는 즉시 리턴해서 비동기 처리가 가능해집니다.중요한 점은, 같은 클래스 내부에서 @Async 메소드를 직접 호출하면 프록시를 거치지 않기 때문에 비동기로 동작하지 않습니다. 면접 질문 정리용 레포지토리http..
동시성 문제 해결하기
·
SW마에스트로
[개요]해당 글은 예약 생성 및 수정 과정에서 발생한 동시성 문제를 다룹니다. 이를 해결하기 위해 애플리케이션, 데이터베이스, 인프라 각 수준에서 적용할 동시성 제어 기법을 검토하고 선택한 기술적 접근 방식에 대해 설명합니다.[요약]동시성 문제 해결을 위해 애플리케이션, 데이터베이스, 인프라 각 수준에서 동시성 제어 기법을 직접 경험하고 검토한 결과, Redis 분산락을 도입하여 동시성을 해결하는 전략을 선택하였습니다.[문제 상황]아래는 예약을 생성하는 로직입니다.[문제 상황 시뮬레이션]직접 작성한 테스트 코드로 동시에 여러 개의 요청이 들어오는 상황을 시뮬레이션한 결과, DeadLock이 발생했습니다.[문제 상황 분석]reserve메소드에는 @Transactional이 걸려있습니다. 이때 INSERT나..
컴퓨터의 병렬 처리 기술
·
CS
들어가며이 글을 읽고 있는 지금 기기에서 어떤 작업을 하고 있나요? 이 글을 읽으며 음악을 듣거나 파일을 다운로드 하고 있을 수도 있고 또는 글을 적기 위한 참고자료로 활용하며 문서 작업을 하고 있을 수도 있습니다.일반적으로 컴퓨터의 cpu는 1개입니다. 그럼에도 컴퓨터는 위 같은 병렬 작업을 당연하다는 듯 수행하고 있습니다. 6코어, 10코어와 같이 코어가 여러 개라 가능하다 생각할 수도 있지만 생각해보면 코어 수보다 더 많은 작업들을 수행 할 때가 있습니다.운영체제를 공부하다보면 멀티 프로그래밍, 멀티 태스킹, 멀티 프로세싱, 멀티 코어, 멀티 스레딩이란 단어들을 마주할 수 있습니다. 이런 기술들로 인해 하나의 기기에서 여러 작업들을 동시에 할 수 있습니다. 하지만 대략적인 것만 알고 정확한 개념이나..
분산 트랜잭션과 합의
·
Side Tech Notes
들어가며요즘 여러 대규모 서비스들은 MSA를 사용하고 있습니다. 이는 각 서버별로 확장을 용이하게 하며 한 서비스의 장애가 다른 서비스로 옮겨가지 않도록 해줍니다.하지만 MSA가 장점만 가지고 있지는 않습니다. 대표적으로 트랜잭션의 문제가 있습니다.예를 들어 주문 서비스와 재고 서비스가 분리된 온라인 쇼핑몰을 생각해봅시다. 여기서 주문을 처리하던 도중 서버가 다운됐다고 가정하겠습니다. MSA에선 일반적으로 각 서비스가 서로 다른 DB를 가지고 있어 트랜잭션이 보장되지 않습니다. 즉, 주문은 생성됐지만 재고가 차감되지 않거나 재고는 차감됐지만 주문이 생성되지 않는 문제가 발생할 수 있습니다. 이처럼 분산 시스템에서는 여러 노드가 하나의 작업에 대해 일관된 결정을 내리기가 쉽지 않습니다.그렇기에 과거부터 계..
리액터 패턴 / 프로액터 패턴
·
Side Tech Notes
들어가며리액터 패턴과 프로액터 패턴을 알아보기 위해 간단한 요구사항을 정의하겠습니다. 지금 미디어 처리 서비스를 개발하고 있습니다. 이 서비스에서는 사용자가 업로드한 미디어에 대해 여러가지 편집 기능을 제공해야 합니다. 썸네일 생성 기능, 워터마크 추가 기능, 포멧 변경 기능과 같은 기능들이 말이죠. 또한 설명의 용이함을 위해 싱글 스레드로 동작한다고 가정하겠습니다.1차 해결책: switch위의 요구사항을 반영하는 방법으로 깊은 고민 없이 switch문을 사용하기로 했습니다. 아래의 코드와 같이 말이죠.while (true) { MediaRequest request = getNextRequest(); switch (request.getType()) { case "THUMBNAIL_GENERA..
HA 아키텍처
·
System Architecture
고가용성이란HA(High Availability) 아키텍처는 말 그대로 고가용성 아키텍처를 의미합니다. 여기서 가용성이란 시스템이 정상적으로 사용가능한 정도를 의미하는 말입니다. 즉, 전체 시간 중 시스템이 다운되지 않고 정상적으로 사용가능한 시간의 비율입니다.현대 서비스에서 가용성은 직접적인 매출과도 관련된 중요한 속성입니다. 예를 들어 시간 당 1억씩 버는 쇼핑몰의 경우 1시간 동안 장애가 발생하면 1억의 손실이 발생하게 됩니다. 또한 할인 이벤트와 같이 서비스에서 중요한 순간에 장애가 발생하면 매출뿐만이 아니라 사용자의 경험에 안 좋은 영향을 주어 기회비용까지 잃게 됩니다. 즉, 브랜드 신뢰도와도 연관된 성질입니다. 이런 가용성을 백분율로 표시해놓은 수치가 있습니다. 아래 표는 위키피디아에서 가져왔..
메시징 패턴: Pub-Sub, Queues, and Event Streams
·
System Architecture
들어가며이전에 작성한 글에서 최종적 일관성에 대해서 알아봤습니다. 분산 시스템에서는 각 시스템간의 디커플링을 지원하기 위해 이벤트 기반으로 동작합니다. 각각의 서비스에서 이벤트를 발행하고 다른 서비스에서 해당 이벤트를 받아서 처리하죠. 그렇다면 여기서 이 이벤트는 어떻게 다른 서비스로 전달이 되는 걸까요?분산 시스템을 공부해보셨다면 메시지 큐라는 단어를 들어보셨을 겁니다. 이런 메시지 큐와 같은 메시징 시스템을 통해 이벤트(메시지)를 주고 받을 수 있는 것 입니다.메시징 시스템은 세 가지 주요 패턴을 가지고 있습니다.메시지 큐: 1:1 통신이며 메시지를 1번만 소비합니다.Pub/Sub(발행/구독): 1:N 통신이며 하나의 메시지를 여러 구독자가 소비합니다.Event Stream(이벤트 스트림): 순서가 ..
엔지니어링의 트레이드오프: 실제 환경에서의 최종적 일관성 (Eventual Consistency)
·
System Architecture
들어가기실시간성을 지원하는 서비스에서는 모든 데이터가 항상 완벽하게 일치되지 않는 상황이 있습니다. 예를 들어 SNS에서 누군가가 게시글을 업로드 했을 때, 친구 목록에는 바로 뜨지 않지만 몇 초 후에 보이는 경우가 있습니다. 이것을 최종적 일관성이라고 합니다.이 글에서는 최종적 일관성이 무엇인지, 최종적 일관성을 바탕으로 시스템을 어떻게 설계할 수 있을지에 대해 설명하려고 합니다.최종적 일관성이란분산 시스템에서 최종적 일관성이란 시스템의 각 부분이 특정 시점에서는 서로 다른 데이터 상태를 가지고 있을 수 있단 것을 의미합니다. 하지만 추가적인 업데이트가 발생하지 않는다면 시스템은 모든 구성 요소가 최종적으로는 동일한 상태가 될 것을 보장합니다.즉, 최종적 일관성을 기반으로 설계된 시스템은 노드 간의 순..