https://www.youtube.com/watch?v=HYUPkKgIUqg 

 

 

지난 4개월 동안 잠을 줄여가며 부트캠프를 달려오다 여유가 살짝 생겼다고 또다시 불안함이 몰려온다. 면접을 볼수록, 공부를 할수록 너무 부족한 것 같아서 이럴 때마다 찾는 나의 방법 중 하나인 자존감 상승 강연 찾아보기를 해보았다. 이 강연을 보고 또다시 정신을 차렸다!

'나는 나를 믿자!, 내 인생 내가 책임져야 하는데 믿을건 나밖에 없다!'

 

에미레이트 항공을 다닌 후에 동료들과 승객들의 인생스토리를 통해 삶은 정말 다양한 방식이 있다는 것을 배우게 되었다. 한국에만 살았을 땐 사회가 정해놓은 보통의 기준, 잘 나가는 기준만 막연하게 따라가려고 하던 내 머리를 띵 하고 얻어맞는 경험을 여러 번 했었다. 분명히 한국에 돌아오기 전에 그 느낌 그 생각 잊지 말고 내 기준을 세우고 흔들리지 말고 살자고 다짐했는데 막상 한국에 와보니 어느새 나도 다시 연봉을 재고 있고, 어떻게 하면 중간 이상으로 살아갈 수 있을까 다시 생각하는 스스로를 발견하게 되었다.

 

이제 진짜 새로운 시작을 해야하는 지금, 다시 한번 한국에 들어왔을 때의 마음을 되새겨 본다. 사지가 멀쩡한데 굶어 죽을 일은 없다. 나처럼 부트 캠프를 수료한 동료들, 그리고 그 외 많은 취준생들의 마음은 비슷할 것 같다. 갑자기 불안감이 몰려올 땐 위의 영상처럼 스스로를 잘 다독이시길 !! 본인을 믿으세요 : ) !! 우리 다 화잇팅 

 

<IT용어 도감> 마스이 토시카츠 지음

 

 

어제 구입한 새로운 책! 깊이 있는 설명은 아니지만 그래도 대략적으로 256가지의 IT용어 설명이 있어서 한번 훑어 보려고 구매했다. 처음보는 단어도 많고, 익숙한 단어도 있고, 읽으면 이해가 되는데 내가 다시 설명하려면 참 어렵다. 많은 연습이 필요할 것 같다.

개발자 직무와 PM 직무 모두 일단 기본 개념을 알아야 면접에 통과할 수 있다. 아직 갈길이 멀지만, 조급해 하지 말고 내 속도대로 준비해보자. 

 

이 책에서 본 몇가지를 정리하는 걸로 오늘 TIL 마무리 하기.

 

1. 스레드와 프로세스

  • 컴퓨터는 여러 프로그램을 동시에 실행할 수 있기 때문에 어느 처리가 CPU를 사용할지 OS를 할당하는데, 이때 분할하는 단위를 말한다. 
  • 프로세스는 OS가 실행하는 프로그램의 단위이다. 일반적으로는 프로그램 1개를 실행하면 프로세스가 1개 동작한다. 1개의 프로세스 안에서는 여러 스레드를 실행할 수 있다.

 

2. 프레임워크와 라이브러리

  • 소프트웨어의 구체적인 기능들에 해당하는 부분의 설계와 구현을 재사용할 수 있도록 준비된 소프트웨어 환경을 말한다. 
  • 개발자는 이 토대 위에서 개별적인 기능을 구현하기만 하면 되기 때무넹 개발 효율의 향상을 기대할 수 있다. 반면, 같은 프레임워크를 사용한 것은 외관이나 동작이 비슷해 개발자가 독창성을 발휘하기 어렵다.
  • 라이브러리와의 차이는 라이브러리는 프로그램에 편리한 기능을 추가할 수 있지만, 개발자가 지시하지 않는 한 아무것도 처리하지 않는다. 프레임워크는 처리를 구현하지 않아도 어느 정도 자동으로 처리한다. 

 

3. 애자일이란?

  • 요구 사항 정의에서 릴리스까지 단기간에 반복하는 방법
  • 소프트웨어를 개발할 때 요구사항 정의부터 설계, 구현, 테스트라는 일련의 흐름을 단기간에 반복함으로써 변경이 있어도 유연하게 대응할 수 있는 개발 방법 중 하나이다.
  • 사양이 변경된다는 전제하에 고객과 대화하면서 움직이는 소프트웨어를 릴리스해 고객이 정말 갖고 싶은 것을 만든다.
  • 유연성은 있지만, 방침이 배뀌면 개발의 방향성이 흔들리기 쉽다.

 

4. 스크럼이란?

  • 우선순위가 높은 것부터 움직이는 소프트웨어 개발 기법 중 하나
  • 애자일 개발에 사용하는 기법 중 하나로, 소프트웨어 개발을 스프린트라고 불리는 단기간으로 구분하고 그 기간 내에 설계나 구현, 테스트 등을 반복한다.
  • 무엇을 어떻게 만들 것인지를 명확히 하는 스프린트 계획이나 우선순위가 높은 것부터 개발을 진행하는 프로덕트 백로그를 사용함으로써 개발팀이 하나가 돼 개발을 효율적으로 진행할 수 있다.

 

 

내일 할일 : 1시 면접, 금요일 면접 준비 (특히 기술 면접), 이력서 수정 및 출력 - 개발 + 월드잡

 

[KB국민은행 IT's Your Life 3기] 면접은 온라인으로 진행되었고, 한 조에 면접자 3명씩 참가했다.

이미 이전에 기술면접에서 털린 경험이 있기 때문에 기술면접 예비 질문을 미리 좀 읽고 참가했지만, 기술 면접 보다는 인성 면접에 가까웠다.

이번엔 합격을 할 거라는 기대보다는 다른 참가자들이 면접을 어떤식으로 보는지 궁금해서 참가했다.

나와 같은 조였던 한 분은 컴공 전공자 학생분이었고, 다른 한 분은 비전공자 출신이지만 1년 가량 개발을 공부하신 분이셨다. 

프로젝트에서 어떤 부분을 맡았는지 구체적으로 묻는 질문이 있었는데, 이 질문은 어딜 가나 받는 질문인 것 같다. 

미리 잘 준비하면 좋을 듯! 

너무 면접 후기가 없어서 긴장했는데, 생각보다 면접 난이도가 높지는 않고 면접 분위기도 엄하지 않으니 혹시라도 다음에 4기에 지원하시는 분이 있다면 걱정하지 마시길! 

 

 

 

 

31. N+1 문제의 발생 이유와 해결 방법에 대해 설명해주실 수 있을까요? 해결 방법은 3가지 이상 말씀해주시면 좋습니다.

N+1 쿼리는 JPA의 프록시로 인한 지연 로딩 때문에 발생합니다. 정확한 의미는 1개의 쿼리를 실행했을 때, 내부에 존재하는 컬렉션들을 조회해오면서 생기는 문제입니다. 

아래는 해결방법 입니다.

1 : Fetch Join (join Fetch를 사용합니다. 쿼리 한 번으로 해결할 수 있습니다) 

2 : @EntityGraph (@EntityGraph의 attributePaths에 쿼리 수행 시 바로 가져올 필드명을 지정하면 한 쿼리에 대해서만 Lazy가 아닌 Eager 조회로 가져오게 됩니다. 

3 : FetchType = LAZY -> EAGER (ManyToOne, OneToOne의 FetchType = LAZY -> EAGER 변경) 

4 : 서비스 단에서 로직을 통해 SEQ을 정제해 IN 방식으로 필요한 데이터만을 Get 합니다. (Native Query를 날리면 됩니다)

해결 방법 5 : interface dto를 구현해 필요한 것만 view로 리턴 받습니다.

 

32. 즉시로딩과 지연로딩은 각각 언제 사용하면 좋은지 설명해주실 수 있을까요?

비지니스 로직 상 Member 데이터가 필요한 곳에 대부분 Team의 데이터 역시 같이 사용 할 필요가 있다면 FetchType을 EAGER로 설정하여 항상 Member와 Team을 같이 조회해오는 것이 더 좋다(즉시로딩).
Member를 사용하는 곳 대부분에서 Team 데이터가 필요하지 않다면 FetchType을 LAZY로 설정하여 Member만 조회하고, 드물게 Team이 필요할 땐 그 때 Team에 대한 쿼리를 한번 더 날려 조회하는것이 좋다(지연로딩).

 

즉시 로딩은 엔티티를 조회할 때 연관된 엔티티도 함께 조회되고 지연 로딩은 엔티티를 조회할 때 연관된 엔티티는 프록시로 조회되며 프록시를 실제 사용할 때 초기화되면서 데이터베이스를 조회합니다. 즉시로딩은 쿼리문을 두 번 따로 사용하여 조회하지 않고 연관된 엔티티를 즉시 조회하는 게 더 유리할 때 사용합니다. 지연 로딩은 필요한 시점에 연관된 엔티티를 조회하여 로딩 시간을 줄이고 불필요한 쿼리문 사용을 방지할 수 있습니다.

 

33. JWT에 대해 설명해주실 수 있을까요? 구체적으로 JWT를 어디서 처리하는지, 어떠한 방식으로 검증하는지, 재발급 방식과 주기는 어떻게 처리하는지, 다른 API 서비스 호출 시 어떻게 잡아서 인증 처리하는지 말씀해주시면 좋습니다.

JWT는 인증받은 사용자에게 토큰을 발급해주고, 서버에 요청을 할 때 HTTP 헤더에 토큰을 함께 보내 인증받은 사용자(유효성 검사)인지 확인한다. 서버 기반 인증 시스템과 달리 사용자의 인증 정보를 서버에 저장하지 않고 클라이언트의 요청으로만 인가를 처리하므로 Stateless 한 구조를 가진다. JWT는 Json Web Token의 약자로 인증에 필요한 정보를 암호화시킨 토큰을 뜻한다. 세션/쿠키 방식과 유사하게 클라이언트는 Access Token(JWT)을 HTTP 헤더에 실어 서버로 보낸다.
1. 사용자가 로그인 시 올바른 사용자임을 확인하고, 클라이언트에게 Access Token(JWT)을 발급해준다.
2. 클라이언트는 전달받은 토큰을 저장해 두고, 인증이 필요한 요청마다 토큰을 HTTP 헤더에 담아 보낸다.
3. 서버에서는 암호화된 토큰을 복호화 해 올바른 요청인지 확인한다.
4. 인증이 완료되고 서버는 요청에 응답한다.

 

34. Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요?

가비지 컬렉터는 주기적으로 JVM의 heap 메모리를 점검하여 스택에서 참조되지 않는 객체를 메모리에서 해제하는 장치이다.
Mark And Sweep 알고리즘은 가비지 컬렉션이 동작하는 원리로 루트에서부터 해당 객체에 접근 가능한지에 대한 여부를 메모리 해제의 기준으로 삼는다. Mark And Sweep은 총 3가지 과정으로 나뉘게 된다.
Mark 과정 : 먼저 Root로부터 그래프 순회를 통해 연결된 객체들을 찾아내어 각각 어떤 객체를 잠조하고 있는지 찾아서 마킹한다.
Sweep 과정 : 참조하고 있지 않은 객체 즉 Unreachable 객체들을 Heap에서 제거한다.
Compact 과정 : Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축한다. (가비지 컬렉터 종류에 따라 하지 않는 경우도 있음)

 

35. Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요?

Map은 key와 value로 데이터를 저장하고 꺼내는 자료구조이다. 리스트와 배열과는 다르게 순차적으로 데이터를 다루지 않는다. Map은 List 처럼 인터페이스이며 Map 인터페이스를 구현한 자료형중 가장 기본적인 것이 HashMap이다. HashMap은 순서보장없이 key와 value로 데이터를 저장하고 가져오는 작업을 도와준다.
프로그래밍 시 Map을 사용할 때 순서보장이 필요할 때가 있다.
1. 정렬기준에 맞춰서 데이터 순서를 보장한다.
2. 입력순서대로 데이터의 순서를 보장한다.
1번에 해당하는 자료형은 TreeMap 이다. 정렬기준을 가지고 있으며 put() 메소드로 입력되는 key와 value 는 정렬기준에 의해 자동으로 정렬되기 때문에 순서를 보장해준다. tree라는 이름이 붙은것 처럼 정해진 정렬기준에 맞추어 데이터를 관리할 수 있다는 장점이 있다.
2번에 해당하는 자료형은 LinkedHashMap이다. 데이터를 입력된 순서대로 관리해서 데이터의 순서를 보장해준다.

 

36. Spring bean container 생성부터 스프링 종료까지의 사이클에 대해 알려주실 수 있을까요? @PostConstruct, @PreDestroy 어노테이션의 역할도 함께 알려주시면 좋습니다.

스프링 IoC컨테이너가 생성되면 Component-Scan으로 Bean을 등록합니다. IoC컨테이너에서 의존성을 주입합니다. 스프링은 Bean에게 콜백 메서드를 통해 초기화 시점을 알려주며 스프링 컨테이너가 종료되기 직전에도 소멸 콜백 메서드를 통해 소멸 시점을 알려주고 스프링이 종료됩니다. 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 관리하는데 그 중 최신 스프링에서 가장 권장하는 방법이 @PostConstruct, @PreDestroy 어노테이션입니다. 위 어노테이션만 붙이면 자동으로 초기화 콜백, 소멸전 콜백이 되기 때문에 매우 편리하게 사용이 가능합니다. 스프링이 아닌 다른 컨테이너에서도 동작한다는 장점이 있지만 외부 라이브러리에는 적용하지 못합니다 @PostConstruct 의존관계 주입이 완료되면 호출됩니다 (초기화 콜백) @PreDestroy 빈이 소멸되기 직전에 호출됩니다 (소멸전 콜백)

 

37. AOP, Interceptor, Filter 의 차이점, Request가 들어올때 거치는 순서, 각 역할들의 장점을 설명해주실 수 있을까요?

Request가 들어올때 거치는 순서 : Filter -> Interceptor -> AOP

 

첫 번째로 Filter는 DispatcherServlet 이전에 동작하는데 Request와 Response를 정제해주는 역할을 합니다. 이후 서블렛이 동작하고 컨트롤러에 도달하기 전 Interceptor가 동작하여 스프링 컨텍스트 내부에서 컨트롤러에 관한 요청과 응답에 대해 처리합니다. AOP는 OOP를 보완하기 위해 나타난 개념인데 OOP에서 중복을 줄일 수 없는 코드를 모듈화 해서 분리하는 개념입니다. Interceptor, Filter와 달리 메소드의 전후지점에서 다양하게 사용이 가능하고, 어노테이션 파라미터 등 다양한 방법으로 대상을 지정할 수 있기에 로깅, 에러처리와 같이 비즈니스 로직에서 세밀한 조정이 필요할 때 주로 사용합니다.

 

 

 

부트 캠프가 끝나고, 지난 주엔 긴장이 풀려서인지 아니면 한국에 들어온 친구 2명을 가이드하느라 지쳐서인지 몸살이 났다. 지난주 국민은행 교육과정 역량 평가 시험도 보고 면접도 어쩌다보니 두개 보고, 모의면접 (아니고 멘토링)도 진행하다 보니 공부는 안 했지만 정신 없이 한 주가 지나갔다. 그리고 오늘, 다시 월요일이 왔다. 부트 캠프 하는동안 한번도 본가에 오지 못해서 강원도에 왔지만 마음이 찜찜해 갖고온 책이라도 폈다.

 

 

 

 

비전공자를 위한 이해할 수 있는 IT 지식 | 최원영 - 교보문고

비전공자를 위한 이해할 수 있는 IT 지식 | IT 시대의 필수 교양서우리는 매일 스마트폰으로 메시지를 보내고, 컴퓨터로 일을 합니다. 또 음식점에서 키오스크로 주문하고, 가상현실에서 게임을

product.kyobobook.co.kr

 

코딩 공부를 처음 시작했을 때 샀던 책인데, 지난 주에 면접 2번 보면서 '진짜 기본기도 없구나' 라는 생각에 쉬러 온 강원도지만 책을 다시 읽어봤다. 한 달만 더 차근차근 공부해 보자. 조급해 하지 말고, 지금까지 너무 머리에 흡수도 안 시키고 때려 박는 식의 공부를 했다면, 이번 한 달은 정말 이해하는 공부를 해보자.

 

마음 같아선 이번주 금요일에 있을 면접에 바로 붙어서 잠시 미뤄버린 두바이 여행도 가고, 빨리 새로운 출발을 하고 싶다. 역량 면접이라고 쓰여있는데, 분명 기술 면접일 것 같아서 벼락치기 공부를 해야한다. 일단 목터뷰로 준비한 50문제 달달 외우고, 추가로 내일 서점에 가서 기술면접 대비 책을 찾아봐야겠다. 면접 연습용으로 내일 오후에 국민은행 면접도 참여할 예정이다. 준비가 되지 않았지만 그래도 다른 참가자들이 어떻게 답변 하는지 보고 배울 수 있을 것 같다. 가족들과 친구들이 나를 믿어주는 만큼 나도 나를 믿어보자 : ) 화잇팅 

 

내일 할 일: 기출문제 프린트 후 달달 외워보기, 국민은행 면접 참가(3시), 이력서 수정 후 인텔리픽 지원, 서점 가서 CS개념서 사기

+ Recent posts