2021년 8월, 2022년 9월 이후로 세번째로 도전하는 YAPP. 사실 부트캠프 이후로 동아리는 별로 관심이 생기지 않아서 처음에는 지원을 안 하려고 했는데 친구가 여기 지원해보면 좋을 것 같다고 추천해주기도 했고, 지금까지 내가 한 활동들이 어떻게 보일지 테스트 해보고 싶어서 지원하게 되었습니다. 

1. 서류 작성 

서류는 YAPP 지원동기, 협업하는 방식, 그동안의 개발 경험, 마주쳤던 문제와 해결방법에 대해서 작성했다. 그동안 여러 지원서와 이력서, 포트폴리오를 작성했어서 내용을 채우는데는 크게 어려움이 없었다. 거기에 가장 최근에 했던 프로젝트만 포트폴리오로 만들어서 제출해서 하루만에 마무리 했다. 제출할 때는 제출했다는 것에 의미를 두고, 합격은 기대하지 않았다. 

 

2. 서류 합격

서류 결과가 나왔는데 합격이었다. 역시나 이 이메일을 보고 놀랐던 기억이ㅋㅋㅋ. 맨날 놀라

이 합격을 통해 작성한 서류와 포트폴리오를 나름 잘 작성했다고 확인할 수 있었던 기회였고, 올해 첫 IT 면접이라서 좋은 기회라고 생각했다. 면접 날짜가 네이버 코테 날짜와 겹쳐서 저녁 시간으로 면접을 잡았다. 

 

3. 면접 

면접은 2:2로 진행되었고, 인성 질문은 공통으로 대답했다. 지원자별로 기술질문은 달랐던 것 같다. 면접자 두 분 모두 친절하시고 원활하게 진행하셨고, 질문은 기술 보다는 소프트 스킬 위주로 질문이 나왔던 것 같다. 여기에 추가로 지원서에 작성했던 문제 해결 경험에 대해서도 질문을 받았다. 

자기소개나 에러 해결 경험에 대해서 설명이 모호했던 것 같아 아쉬웠던 면접이었다. 

 

나왔던 질문들로는 다음과 같습니다.

- 자기 소개

- YAPP 활동을 통해 얻어가고 싶은 것 

- 취업 준비와 동아리를 병행하는데 문제가 없을지?

- 취업을 하게되면 시간 여유가 없어질텐데, 어떻게 할 예정인지? 관련 경험이 있는지?

- 개발자로서의 강점은 무엇인지?

- 팀원과의 갈등이 있었는지? 구체적으로 어떤게 있었는지?

- 해당 상황에 어떻게 대처를 했었는지?

- 개발하면서 가장 보람있던 순간은?

- DB 트랜잭션은 언제 사용하는지?

- @Transactional(readOnly = true) 어떻게 성능을 향상시키는지?

- Java Stream API가 무엇인지? 어떤 종류가 있는지?

- map, filter 외에 다른 연산을 사용해본 적이 있는지?

- 진행했던 프로젝트 소개

- 401 에러가 발생한 레이어가 스프이었는지? jwt 였는지?

- 이메일 로그인과 소셜 로그인의 유저를 하나의 테이블에서 처리한 이유?

- 같은 백엔드 팀원이랑 사용하려는 기술 스택이 다른 경우 어떻게 대처할지?

- 추가 질문 사항

 

 

4. 면접 불합격

면접 질문에 나름 질문 잘 한 것 같기도 했지만, 또 못하거나 애매하게 답변한 게 있어서 합불은 잘 예측되지 않았다. 

그렇게 며칠 뒤 결과는 불합격이었다. 불합격은 언제나 씁쓸하지만 그래도 면접관분들께서 이번 백엔드 경쟁률이 높았는데 면접까지 온 것만 해도 대단하다고 하시기도 했고, 나도 포트폴리오에 대해서 긍정적인 피드백을 받았기에 마냥 실망스럽지는 않았다. 가능성이 있구나 싶은 느낌. 떨어져서 아쉽기는 했지만, 또 도전했다는 것에 의의를 두면서 YAPP 후기 -끝-

1.자기소개,지원동기

 

 

2.공통 질문( 일단 기억나는 거 위주로)

 

  • 리더인지 팔로워 인지?  : 팀에서 사람들 의견을 잘 듣는 편이기도 하고, 리더였던 적이 없어서 팔로워인 것 같다. (리더 경험을 할 수 있는 일을 해야하나?)

 

  • 경험을 토대로 본인이 리더가 된다면 어떻게 할지: 내가 사람들의 의견을 잘 들으니까 팀원 들이 필요한 건 무엇인지, 개선해야할 것은 무엇인지 물어본 후 의견을 잘 들어서 팀의 발전을 위해 기여할 것이다. (이 부분에 대해 생각해 본 적이 없어서 내가 리더가 된다면 어떻게 할 것인지 생각해 봐야할 것 같다)

 

  • 주어진 일이 많으면 어떻게 할 것인지 : 평소에 할 일을 많이 맡는 편은 아니지만(굳이 얘기 안해도 됐던 것 같음) 만약 그런 일이 생긴다면 책임감을 가지고 수면 시간을 줄여서라도 맡은 일을 다 끝내려고 노력할 것이다.

 

  • 시간이 오래걸려도 퀄리티 좋은 걸 선택? 아니면 마감기한에 맞추는게 중요하다고 생각하는지? :회사 업무를 한다면 회사에는 마감기한이 있기에 그거에 맞춰서 일을 하는 것이 중요하다고 생각하는데, 스스로 발전하기 위해서 이 동아리에 지원한만큼 많이 배우는 것이 중요하다고 생각한다. 그래서 동아리 활동하는 것에 있어서는 시간이 오래걸려도 퀄리티 좋은 걸 선택할 것 같다. 

- 서류기반 기술질문

 

  • aop: 대답 못함*
  • mvc에 대하여: 대답못함*(내가 자소서에 써놓고)
  • snakecase: 대답 못함,,,(자바에 적합한 이름 방법)*
  • restful api: 대답함
  • put,petch: 대답함 
  • 도커: 대답했는데 잘 모르겠음

 

  • 스터디하면서 어려웠던 점과 해결했던 점
  • 어려움을 해결한 과정 
  • 배포도 했나?: 못했다고 함
  • 어려운 점 풀어가는 방식이 인상깊었다고 함

 

-결과: 불합격

 

  • 내가 생각한 불합격한 이유: 기술질문 절반을 대답하지 못한 것, 기본적인 질문 대답 못함(camelcase는 알았는데 sneakcase 몰랐음)
  • 해결방안: 내가 다루는 프레임워크, 프로그램에 대한 지식 습득하기/기본적인 컴공 지식들 공부하기 

 

  • 스펙이 많이 부족해서 당연히 서류에서 떨어질 줄 알았는데 처음으로 서류합격을 해 본 경험이라 의미가 있다고 생각함
  • 비전공자이지만 그 생각에 나를 제한하지 않고 올해 시작하면서 인강도 듣고, 스터디도 하면서 꾸준히 쌓아올린 결과물이라고 생각해 발전가능성을 느끼게 된 경험이었음
  • 앞으로 시간적 여유가 많으니 기본적인 것부터 차근차근 공부해 나가면 더 발전할 수 있을 거라고 생각함 

 

<대답 못했던 부분 공부>

 

1. AOP(aspect oriented programming,관점 지향 프로그래밍)

: 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로(코드들을 부분적으로 나누는 것을 의미함)

각각 모듈화하는 것

모듈화는 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말함

핵심적인 관점(모듈화) (논리) 부가적인 관점(모듈화)

핵심적인 관점: 우리가 적용하고자 하는 핵심 비즈니스 로직이 됨

부가적인 관점: 데이터베이스 연결,로깅,파일 입출력 

->소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발결할 수 있음. 흩어진 관심사(crosscutting concerns)

 

즉, 흩어진 관심사를 aspect로 모듈화하고, 핵심적인 비즈니스 로직에서 분리하여 재사용하는 하겠다는 것이 aop의 취지.

 

-aop의 주요 개념

  • aspect: 흩어진 관심사를 모듈화 한 것. 부가기능을 모듈화함
  • target : aspect를 적용하는 곳(클래스,메서드,,)
  • advice: 실질적으로 어떤 일을 해야할지에 대한 것, 실질적인 부가기능을 담은 구현체
  • ointPoint: Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능

-PointCut: JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음

++(target,advice,jointpoint,pointcut을 다 모은게 aspect인가?)

 

-스프링 AOP 특징

  • 프록시 패턴 기반의 aop 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임
  • 스프링 빈에서만 적용 가능
  • 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원하는 것이 목적
  • 문제라 함은 중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가,,,등 

 

++모르는 단어: 프록시, 프록시패턴, IoC,엔터프라이즈 애플리케이션 

 

출처: https://engkimbs.tistory.com/746

 

2. snake_case

: 언더스코어를 구분자로 함. 주로 상수 표현 시에 사용됨

  • camelCase
  • kebab-case
  • PascalCase

 

3. 도커(Docker)

 

- 컨테이너 기반의 오픈소스 가상화 플랫폼

  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
  • 프로그램(백엔드,디비 서버,메시지큐 등) 컨테이너로 추상화 할 수 있고, 조립 pc, aws,azure,google cloud 등 어디에서든 실행할 수 있음

 

-도커의 장점

  • 모듈성
  • 계층 및 이미지 버전 제어
  • 롤백
  • 신속한 배포

 

  • 도커는 단일 컨테이너 관리에 적합하도록 만들어져 있는데, 수백개로 세분화된 컨테이너와 컨테이너화된 앱을 점점 더 많이 사용하기 시작하면 도커가 컨테이너를 그룹화 해야함. 이때 이용되는 것이 쿠버네티스 

 

++모르는 단어: 쿠버네티스 

 

출처: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

        https://www.redhat.com/ko/topics/containers/what-is-docker

 

4. Spring MVC

 

+ Recent posts