본문 바로가기
모임/면접

모의 면접 그리고 기술 면접

by 고구밍 2022. 6. 9.

 

오늘 양태환 멘토님께서 모의면접을 해주셨습니다.

이력서 작성과 평소에 Spring에대한 개념공부가 부족하여서,

모의 면접에서 단골로 나오는 문제들을 질문 받고,

알고 있던 내용들을 설명하는 방식으로 면접을 진행하였습니다.

 

30분간 아주 기초적인 기술 면접이였는데,

1. JPA에대해 간단하게 설명해주세요?

더보기

자바의 ORM 표준이다.

"JPA 표준이 나오기이전에 Mybatis 찾아보셨나요?'

 

아니요 사용해보지는 않았습니다.

 

"그렇죠, 요즘에 JPA를 써요 "

"JPA는 ORM표준보다 더 중요한 것은 뭐냐고 하면!"

"JPA를 쓰는이유가 중요해요!"

 

장점)

1. 생산성 : SQL의 반복작업이 없어진다.

2. 유지보수 : 테이블 컬럼 한개가 바뀌면 Mybatis에서는 관련 DAO의 파라미터, 결과 SQL등을 모두 확인하여 수정해주어야 한다. JPA는 대신 해준다.

 

"예전에 JDBC는 공부하셧나요?"

"이건 생으로 JAVA에서 데이터 베이스를 붙이는 거에요, 커넥션"

"JDBC가 JPA안에 숨겨져 있어서 모르는데,"

"JDBC도 물어볼 수 있는 주제에요, 이거는 구연은 안해보더라도 한번은 찾아보세요"

 

 + JDBC : JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 

 

"JDBC를 생으로 짜도되요, 옛날에는 그렇게 짰었어요."

"그러다가 동적으로 쿼리를 만들어야지! => 내가 데이터베이스 계발자인지 자바계발자인지 모르겠다! 불평이나와서 나온것이 Mybatis에요."

 

"Mybatis는 동적쿼리를 만들어주기는 해요, 여기서 한단계 나간것이 JPA에요."

"이미 동적으로 만들어주는 Mybatis, 한동안 표준이였는데,"

"그러면 왜? Mybatis를 안쓰고, JPA를 쓸까? 이거에 대해서 가장 먼저 물어봐요."

 

"왜 JPA를 쓰는가?"

 

"JPA를 사용하는 근원적인 이유는 ORM"

"모든 ORM프레임 워크가 가지고 있는 장점이 하나 있어요"

 

"객체지향중심!"

 

"예전에, 개발자들은 데이터베이스를 기반으로 하는 데이터 중심이였어요"

"자바는 객체지향이잖아요"

 

"자바는 비즈니스 로직은 객체지향으로 짜는데, 이거를 관리하는 데이터베이스는 데이터기반이에요"

"여기서 괴리가 옵니다"

"1차 캐시... 되게 커요 이것은 이따가 이야기 해보죠"

 

-----------------------------------------------------------------------------------------------------

 

추가내용

 

데이터베이스를 비즈니스 로직에 Entity로 가져올 때

객체 지향점으로 연결해 줄 수 있는 것이 ORM이에요

 

개발자가 개발을 할 때, 객체 지향적으로 Entity를 다룰 수 있는게 장점이에요

이뿐만 아니라 또다른 장점

 

영속성 컨텍스트(Persistent context)의 라이프 사이클을 아시나요?

MVC 언제 생겼다가 사라질까?

 

트렌젝션이 생성이 됬을 대 만들어지거든요?

1. 트렌젝션이 시작이 됬을 때 영속성 컨텍스트가 생성이 되고요

2. 트렌젝션이 마무리 될때 영속성 컨텍스트가 사라져요.

 

그러면 스프링 어플리케이션에서 언제 트렌젝션이 생기죠?

1. 트렌젝션 어노테이션을 만들 때

2. 트렌젝션 어노테이션 -> 서비스

3. 일반적으로 어느 계층에서 생성되서 어디까지 가나요? (서비스 -> ? )

4. 서비스계층에서 생성이 되어서, 뭘 호출이 되죠? -> DB에 갈 때 뭘 쓰나요?

5. Repository를 쓰죠?

6. 서비스 -> 레파지토리 -> 메소드가 끝날 때 트렌젝션이 사라지죠?

7. 그 때 영속성 컨텍스트가 사라져요

 

 

트렌젝셔널에 사용된 스프링의 기술이 뭔가요?

스프링을 이루는 근간의 기술이 뭔가요? DI아시나요?

 

제어역전기법중 하나가 DI

스프링을 쓰는 이유가 DI인거에요

 

이것과 함께 쌍벽을 이루는게, AOP

트렌젝션이 왜 AOP인지 설명해주세요

 

AOP가 관점지향 프로그램이라서 여러군데 사용하는 것을 하나로 묶어서 

AOP는 행단관심사라고 하죠, 제가 원하지 않는 기능이 있어, 이게 필요해요

비즈니스 로직에만 집중하고싶어, 관심은 있지만 반드시 필요한 기술이 있어요.

트렌젝션을 다루는 기술이 필요해요.

 

필요한 관심사, AOP 행단관심사를 따로 빼서 메소드에 덮어쓰는 거죠

트렌젝션 -> 오류 발생하면 Rollback

 

내가 관심없지만 꼭 필요한 여러군데에서 사용하는 기술을 따로 빼서 구현한것

-> 이게 AOP이고, 대표적인 것이 트렌젝셔널이에요.

 


 

 

2. Spring Web MVC의 Dispatcher Servlet의 동작방식

더보기

"Dispatcher Servlet이라고 들어보셨죠?"

"스프링 아키텍쳐에 있어서, 맨 앞단에 있는 Dispatcher Servlet"

 

"프론트 서블렛이고, 요청을 받아서"

"핸들러 어뎁터를 찾아서, ~~~"

"이건 기본이에요, 기술 면접보실 때 이거는 스프링 아키텍쳐에서 맨 앞에 나오는 것이기 때문에 잘 아셔야되고요"

 

 

3. filter와 interceptor의 차이

더보기

"여기에 이어서 되게 중요한 아키텍쳐 질문을 드릴게요"

"filter와 interceptor의 차이"

 

"아, 그러면 이것 먼저 확인 해야 될 것 같아요."

"서블렛 컨테이녀와 스프링의 어플리케이션 컨텍스트의 개념을 아시나요?"

 

"톰켓이 하는 일이 뭔가요?"

<- '동적으로 뷰를 전달한다고 알고있습니다 - 나....ㅠㅠㅠ'

"동적으로 뷰를 전달하는 것은 스프링이 하는 일이죠"

"컨트롤러 딴에서 서비스로 요청을 보내고, 거기서 받은걸 기반으로 뷰를 보여주는"

"아니면 RestController같은 경우에는 프론트에 JSON을 주는"

 

"톰켓은 지금은 SpringBoot 내부에 들어가 있죠 "

"임베디드 톰켓이기 때문에 사람들이 생각보다 신경을 많이 안쓰는데"

"톰켓, 서블렛컨테이너는 웹개발자면 되게 Heavy하게 알고있어야 하는 주제에요."

 

"신입을 뽑을 때 톰켓이 어떻고, 내부에서 어떻게 작동하는 지는 물어보지는 않겠지만"

"서블릿 컨테이너가 어떤 역활을 하고, 그 위에 스프링이 어떻게 언저져 있는지 알아야 되요."

"이거는 기본적인 질문으로 나올거에요."

 

 

"filter는 서블릿필터라고 해서, 톰켓 안에 있는 거고"

"Dispatcher Servlet의 앞단에 있어요"

 

"interceptor는 스프링 안에 있어요"

"Controller로 가기전에 인터셉터가 여러가지 요청처리를 하는거에요"

 

 

"Spring Security도 공통질문에 있더라구요? 여기서 어떻게 이어질 수 있냐고 하면"

"Spring Security가 작동하는 Layer가 어딘지 아시나요? 어디에서 보안작업을 할까요?"

"Filter입니다"

 

"어, 그런데 특이한거는 Interceptor가 Spring안에있고, Filter는 Spring밖에 있단 말이에요. 톰켓에 있지"

"그런데, Spring Security는 Filter를 사용해요, 서블렛 필터에 위치합니다."

"여기서 사실은 바깥으로 하나 빼가지고 하는건데"

 

 

"Spring Security는 광범위하고 복잡한 주제거든요?"

"그런데 기술면접에는 빠지지 않아요, 직접써야 되거든요"

"프로젝트에서 Spring Security를 사용하셨고, 이력서에 적으셨으면 반드시 질문이 나옵니다"

 

 

그다음 중요한게, 

"Spring에서 에노테이션으로 configuration 붙이죠?"

"config파일을 구성하는게 뭐냐고하면, 스프링 컨텍스트를 만들어요."

"스프링 컨텍스트에 들어가는게 Bean이에요. Bean은 객체를 말해요."

"스프링이 관리하는 객체"

 

"그러면 객체의 Bean Life Cycle, 빈이 언제 생성 되었다가, 언제 죽는가? 이거를 설명할 수 있으셔야되요."

 

------------------------------------------------------------------------------------------

아파치와 톰켓이 있잖아요

아파치는 멀티 프로세싱이에요

톰켓은 멀티 스레딩이에요

 

둘의 차이를 설명해주세요

NGNIX는 이 둘다 아니에요

 

멀티프로세싱(옛날?)과 멀티 스레딩의 차이

지금은 NGINIX에서 나온 개념을 쓰고있긴한데...

 

멀티프로세싱보다 멀티스레드가 좋은가?

 

멀티빼보죠 프로세싱과 스레드의 개념?

 

프로세스: 운영체제로부터 자원을 할당받는 작업의 단위이다.

스레드: 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에 여러개 생길 수 있다.

 

멀티 프로세스 : 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)을 처리하는 것이다.

멀티 스레드 : 프로그램을 여러개의 쓰레드로 구성하고 각 쓰레드가 작업( task )를 처리하는 것

 

동시성 문제 -> 검색해보세요

이 문제를 해결하기 위해서 예전에는 멀티 프로세싱이였고, 그다음이 멀티스레딩이였어요

NGINIX는 그다음, 요즘에는 <멀티프렉스드 아이오>라는게 있어요.

 

JAVA에서 이벤트

자바스크립트 -> 싱글스레드

동시여 여러개 돌아...싱글 스레드인데 어떻게 동시에 돌지? -> 이벤트 루프

이벤트 루프를 OS상으로 가져온게 

 

 


 

 

3. Spring Bean Life Cycle에 대해 설명해주세요

더보기

 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메서드 호출 -> 에플리케이션 사용 ->  소멸전에 콜백 메서드 호출 -> 스프링이 종료

 

"어플리케이션이 생길 때 컨테인이 생기고, 컨텍스트 생기고 거기에 넣었다가"

"Autowired쓰셨죠, 요즘은 Autowired를 안쓰는 추세인데, 생성자주입 하셨죠?"

"위에 컴포넌트 쓰시고, 그 밑에다 내가 필요한 서비스를 받아서 쓰셨잖아요?"

"그때 궁금하지 않으셨어요? 나는 이 코드내에서 객체를 생성한 적이 없어!"

"그런데, 생성자에다 몇개 오브젝트를 썻다고해서 이게 돌아가네? 이 부분에 대해서 궁금하시지 않으셨어요?"

 

"컴포넌트라고 어노테이션을 적엇다고,"

"그때 이 생성자를 통해서 주입해주는 친구가 스프링컨텍스트고,

이게 주입해 주는 대상이 이 컨텍스트 안에있는 이 Bean이에요"

 

"그래서 이걸 알아야 되요 내가 생성자 주입이나, 세터 주입이나, 필드 주입이나 주입을 하였을 때"

"이 주입을 해주는 주체가 누구인가? 이걸 아셔야 되요"

"이게 어려운 말로 Dependency Injection 의존성이에요"

 

"Spring에서 Dependency Injection을 이렇게 사용하는 거에요. 이걸 완벽하게 알고 계셔야 되요. 이걸 물어봐요"

"이 때 가장 중요하게 이 포인트를 가져가야 되요"

"스프링 빈라이플 사이클은 어떤 디자인 패턴이냐, 말씀하셔야되요."

 

"모든 쓰레드에서 다 가져다 쓰는 것"

'싱글톤!'

"맞아요, 싱글톤! 그게 나와야 되요"

 

"스프링 컨텍스트에 들어가는 빈은 기본적으로 싱글톤이에요"

 

"아니야, 이게 내부에 상태정보값을 갖고있기 때문에 싱글톤으로 구현할 수 없어 이럴 때 쓰는게 어떤것인 지 아시나요?"

"이게 프로토타입이에요"

"빈 어노테이션 옆에다가 프로토타입을 쓸 수 있잖아요."

"이거는 요청할 때마다 객체를 만들어서 넣어주는 거에요"

"이게 머리속에서 그려지셔야 되요."

"이거를 정확하게 설명해 주시면, 스프링 아키텍쳐에 대해서 잘 이해하고 있구나 생각하실거에요"

 

"아마 초반에 이런 것을 물어볼거에요. 보통 기술면접이 한 사람당 1시간 반에서 2시간 해요"

"이게 앞부분이 이런 이야기를 많이하고"


 

4.OOP

더보기

"객체지향 설계"

"오브젝트 오리엔트 프로그래밍, 객체지향 프로그래밍"

 

"이거는 사실 신입분들이 경험을 안 했기 빼문에 최대한 개념에 대해서 알고 있는지 물어봐요"

"아주 기본적인 것을 찝어 드릴 게요."

 

"혹시, OPP의 3대 계념을 알고있나요?"

"SOLID는 아니에요, SOLID는 3대개념을 구현하기 위한 현업 개발자에게 주는"

"로버트 마틴의 충고고"

 

"OOP에 나오는 3대개념을 말씀해 드릴게요"

"추상화Abstraction"

"정보은닉 Information Hiding"

"다형성 polymorphism"

 

"이 3가지, 이게 OOP의 기본이에요. 여기서 파생되는게 SOLID에요"

"경험이 많은 개발자의 충고에요. 그게 SOLID"

 

"public, private을 불리해서 붙였잖아요"

"public은 바깥에서 보이죠"

"private은 가리죠"

 

"뭐를 public은 공개를 하고"

"뭐를 private은 막을건가"

 

"이걸 결정해야되죠, 이게 정보 은익이예요"

"여러분들이 하고있는게 바로 그거에요"

 

"무분별한 Setter나 Getter는 이제 사라져야 된다"

"JAVA Bean 아키텍쳐는 이제 갈 때가 되었다 이런 이야기가 나오잖아요?"

"이거에 대해서 할 이야기가 엄청 많은데..."

 

-------------------------------------------------------------

 

객체지향 설계

 

클래스를 어떻게 만들 것인가?

질문을 드리되 개념만 찝어 드릴게요

 

OOP의 3대개념

추상화란 뭘까? 

정보은닉, 캡슐화 : public, pravate

가장 중요한 개념 : 다형성 -> 상속과 위임이 존재하는 이유 -> 여기서 빠져나온 개념이 DI

완벽하게 머리속에 들어와야 되요

 

상속과 위임의 차이

왜 상속을 쓰지말고 위임을 쓰라고하는지 설명하실 수 있으신가요?

 

 

 

 

5. 마지막으로 SOLID

더보기

"마지막으로 SOLID!"

 

"S가 Single Responsable(단일 책임원칙),"

"O가 Open Close Principle()"

"L이 Liskov ()"

"리스코프는 사실 현역 개발자들도 설명 못하는 사람들도 많아요"

"I는 인터페이스 분리원칙"

"DIP가 스프링 프레임워크를 IOC컨테이너라고도 부르거든요. IOC의 대표적인 기법이"

"DI, Dependency inversion"

"이가 다 맞물려 있는거에요"

 

"스프링을 우리가 왜 쓰냐고하면, 객체지향적으로 너무 잘 만들었어"

"되게 라이트하고"

 

"예전에 J2L 인터프라이즈 에디션쓰며는 너무 무거워서 못었어"

"이게 읽어도 이해가 잘안되지만"

 

"설명할 수 있는 정도까지는 준비해야되요"

"OOP는 무족껀 물어봐요"

 

"왜냐하면 입사하면, 제일먼저 할건는 코드를 만드는데, 클래스 하나 만든다는 거니까"

"클래스를 만드는데 사용하는 기법이 SOLID이잖아요"

"바로 데려다가 쓸려면 이 부분이 필요하니까"

 


 

"이것만 말씀드릴게요"

 

 

6. 상속과 위임

더보기

 "상속과 위임 그리고 책임"

"이거는 책을 사서 보라는건 아닌데, 오브젝트라는 책이 있어요"

"되게 꼭 빌려보세요"

 

"책임이 뭔가, 위임이라는 개념, 이 상속 대신에 위임을 써야하는 이유"

"상속을 피해라! 이게 왜 그런지를 완벽하게 설명할 수 있어야 되요"

 

"그러면 기술면접을 괜찮을 것 같아요."

 


 

7. 더 말씀드리고 싶은데 시간이...

더보기

 "그 외에도 할게 많긴한데"

"이거는 기본이에요, 2시간 기술면접 하는 것 중에서 30분 불량이에요. 제대로 답변을 한다면"

"왜냐하면 제가 자바에 대한 질문을 하나도 안했잖아요 ㅎㅎㅎㅎ"

 

"그리고 그다음에 필요한게 OS까지는 안가더라도 네트워크 지식이나 http 질문이 나와야 되잖아요"

"아쉬운데, 일단은 여기까지 이정도 내용만 정리하면 많은 도움이 되실거에요! :D"


 

+추가 java 8

더보기

Entity와 Value의 차이

Dto와 Dao 단답형

 

Stream api가 있어요

필터, 맵

 

스트림 api와 커넥션 api 차이는 뭔가요?

둘다 데이터를 다루는거에요.

어떨때 쓸까?

 

ex)

5기가짜리 데이터가 있으면

커넥션으로 ec2가 터질거에요 -> 스트림 (일부 가져와서 처리) -> 안터져요 (느리겠지만)

 

-----------------------------------------

오버로딩 : 동일한 메소드명을 가지고 파라미터의 갯수나 타입을 다르게 선언해서 사용

 

오버라이딩 : 메소드를 구현체로 구현해놓고, 각자 가져다 썻을 때 상속하는 것

 

-----------------------------------------

 

자바 : ArrayList -> 동적배열, 링크드리스트 -> 링크드리스트로 구현이 된것

둘의 차이는 뭘까요?

 

동적배열과 링크드 리스트가 뭔가?

자료구조에 대한 질문을 더 많이 할거에요

 

+ 스택이랑 큐가 뭔지 정리학셔야되고

 

--------------------------------------------

좀 큰데는 이런 것도 물어봅니다.

 

+ JVM관리방식

올드

이런 영역

처음 객체가 생길때

Young객체라고해서 금방 -> 계속 참조를 가지고 있으면 -> 켄유얼드로 바뀌는 것

 

------------------------------------

 

 

 

 

부족한게 많았지만, 양태환 멘토님 30분간 좋은 이야기 해주셔서 감사합니다! ㅎㅎㅎㅎ

하나하나 쪽집개로 기초 상식을 알려주셔서 꼭 숙지하고 아쉬움 없는 기술면접 준비하도록 하겠습니다 :D

'모임 > 면접' 카테고리의 다른 글

첫 면접을 마치면서 느낀점  (0) 2022.06.14