• 4/29일 지원(30일 마감), 5/17 서류 합격 통보, 5/30 1차 면접 진행.
  • google meets 비대면 면접.
  • 호전적인 인상의 면접관님.

지원 ㄱㅅ
면접 전 설명

  • 30~50분 소요
  • 질문의 답이 길어지거나 주제에서 벗어난다면 끊을 것으로 양해
  • 개인적인 질문이 있을 경우 편하게 끊어도 된다

간단한 자기소개

"읽기 좋은 코드가 좋은 코드다"라는 개발 철학에 빠져 문제 해결에 있어 유지보수성 향상과 클린 코드에 가치관을 둔 4년차 개발자입니다.
Java, Spring 환경의 BE 운영/고도화/신규개발을 수행했고, 그 과정에서 만난 코드는 대체로 절차지향적이고 하드코드가 많으며, 중복이 많은 스파게티 코드였습니다. 저는 과업을 수행하는 과정에서 이러한 코드들의 구조를 개선시켰고, 유지보수성을 향상시켰습니다.
또한, 절차지향적인 코드를 작성하는 팀원들을 객체지향적 프로그래밍을 하도록 이끌어낸 경험도 있습니다.
JD 상에 기술 부채 해결과 레거시 코드 개선 및 신규 아키텍쳐에 적용이라는 키워드가 있었는데, 제가 잘 할수 있는 일과 도전해보고 싶은 일이라고 생각해 지원하게 되었습니다.

자사몰이나 앱 사용 해 봤느냐

ㅇㅇ 레벨 3다.
이거 저거 샀다. (구체적으로 명시했음, 글에 작성하면 어딘지 쉽게 알 수 있어서 자체 필터링.)

이건 내가 고쳐볼 수 있겠다 싶은 기능?

앱에서 픽업 기능을 사용하면 종종 튕기는 현상이 있었다. 기회가 주어진다면 개선해 보고싶었다.
그리고 PC 사용을 더 많이 하는 편인데, 개발자 창을 열어보면 불필요한 로그나 콘솔 에러가 좀 있고, 주석상에 어뷰징이 가능할 것 같은 내용이 있었다.
이런 점들을 개선 시켜 보고 싶었다.

스프링 부트 사용?

업무적 사용은 안했고, 공부할 때 써봤다.

그냥 스프링과의 차이는 어떤게 있다고 느꼈는가?

xml 설정은 읽기 편하지 않은 책을 읽는 느낌이고, 옵션을 넣을 때 <>안에 넣어야하는 값과 하위에 넣어야 하는 갑의 구분이 쉽지 않다.
톰캣이 내장되어 있기 때문에 개발 환경과 실행환경의 차이를 줄일 수 있는 게 장점이였던 것 같다.

DI에 대해 설명해 달라

Dependency Injection 의존성 주입. 각각의 클래스 의존 관계를 IoC 컨테이너가 자동으로 주입하는 것.
의존 관계 주입을 개발자가 관리 하지 않기 때문에 비즈니스 로직에 집중할 수 있는 장점이 있다.
의존성 주입은 Service, Repository, Autowired, Component 어노테이션을 사용할 수 있다.

의존성 주입을 할 때 Bean을 만드는데, bean에 대해 설명하라

어....(버벅버벅)...
IoC 컨테이너에게 관리를 위임하는 객체를 Bean이라고 볼수 있다.
IoC 컨테이너는 이 빈의 객체 생성부터 의존성 주입, 초기화, 소멸 등 라이프 싸이클을 관리한다.
(틀린 듯)

Bean의 디자인 패턴은 무엇인가?, 스프링은 보통 이 디자인 패턴으로 되었다고 한다.

bean 객체는 싱글톤으로 객체가 생성이 되고, bean 생성시 factory pattern도 사용한다고 알고 있다.
(틀린 듯)

AOP와 함께 따라다니는 3총사 Filter Interceptor AOP의 실행 순서를 말해보라

request -> filter.doFilter -> dispatcher -> interceptor.preHandle -> controller -> aop -> service -> aop.around -> controller -> interceptor.postHandle -> dispatcher -> filter.doFilter -> response

그 셋의 차이?

셋다 어플리케이션에서 자주 사용되는 로직을 분리하여 처리하는 기능을 제공.
filter는 보통 xss 보안을 위해 사용한다.
interceptor는 로그인, 권한, 로깅, 세션 처리등을 전담한다. aop의 기능을 흉내낸다고 볼 수 있다.
aop는 핵심 로직 사이에 끼어있는 횡단의 관심사, 공통의 로직을 분리해서 모듈화 한것으로....
(말 잇지 못함)

XSS는 무엇인가?

크로스 사이트 스크립트 공격으로, 게시물에 sript 태그를 넣어 다른 사용자에게 공격을 하는 것이고. 이런 script 태그를 막기 위해 xss 방어를 한다.

어떻게?

보통은 <>lt, gt로 치환을 많이 한다.
(원하는 대답은 이게 아닌 것 같은데, 아는게 이것...)

SI 할때 게시판에 특수 문자를 넣었을 때 깨진다 라는 인입을 받으면 어떻게 대처했는가?

예전 기억이라 흐릿한데, filter를 테스트 해서 수정한 기억이 있고. doFilter의 치환을 직접 작성하기도 하지만 naver lucy로 적용한 적도 있다.
(이것도 옳은 대답이 아닌 듯)

Transaction 요소 4가지 설명해 달라

아..(버벅)
독립성과 원자성 등등이 있었던 걸로 기억 나는데 잘 기억이 안난다.
(면접관님 호탕하게 웃음)

RESTfull API가 어떤건지 설명해봐라

Representation state transfer의 약자로 http 프로토콜을 그대로 이용하며 웹의 장정을 이용하고, URI를 통해 대상 객체를 지정, get, post, put, delete의 http method 이용해서 해당 자원의 처리를 하는 방법을 의미한다.

그럼 API 설계를 했을 텐데, RESTfull API 설계 원칙 몇가지를 대봐라

  • /는 계층관계를 나타낸다.
  • uri의 가독성을 위해 _는 지양하고 -를 지향해야 한다.
  • uri는 소문자를 권장한다.
  • 리소스 간의 연관관계가 있다면 /{메인 리소스}/{리소스 id}/{연관 리소스}로 표현한다.

http 응답 코드와 의미를 아는대로 불어라

  • 200
  • 302, 303, 304
  • 401, 404, 415, 405
  • 500

http method 불어라

  • get, post, put, delete
  • trace, option이라는 것도 있는 것으로 알고 있다.

사용 목적은?

  • get select
  • post insert/update
  • put update
  • delete delete

공공기관에서는 put, delete 사용하지 말라고 들었을 텐데 왜그런지 아느냐?

(예전 타사 면접에서 이 얘기 했다가 그게 말이 되냐는 소릴 들었던 경험이 있어서 오히려 반가웠음.)
정확한 기억은 아니지만, web server에 따라 put, delete를 was로 요청이 가는게 아닌 web server가 구종되는 OS 자원을 실제로 삭제하거나 데이터를 넣는 기능이 있다.

해당 내용에 대해서 apache, nginx에서 put, delete를 막는 방법을 아느냐?

흐릿한 기억으로는 설정파일에 allow, not allow로 요청자의 ip나 경로에 따라 해당 메소드를 허용/비허용하는 설정을 했었다.
(왜 이런 것 까지 해봤니?)

MyBatis에서 #과 $의 차이점이 무엇인가?

일반적으로는 #을 사용,
#은 string일 경우 ''를 붙여주고, number type인 경우에는 ''가 없이 쿼리를 만들어 준다.
$를 사용할 경우에는 type 상관 없이 주어진 객체를 '' 없는 스트링으로 넣어주는 것으로 알고 있다.
(정확한 차이를 대답한 것이 아니라 생각됨.)

보안팀에서 $를 사용하면 사용하지 말라고 하지 않던가?

재직하던 곳에서는 조직이 그렇게 나뉘어 져 있지 않아서 그런 일은 없었다.
다만 $를 사용하면 SQL Injection 문제가 있기 때문에 #을 사용해야 하는 것으로 알고있다.

DB는 어떤 것 사용해봤는가?

Oracle 주로 사용, mysql, PostgreSQL, Cubrid, Tibero

index 개선했다고 했는데, index가 어떤 원리기 때문에 쿼리를 개선해주는가?

DB가 데이터를 저장할 때 B+tree로 데이터를 저장하는데, tree와 LinkedList에서 index를 가지고 있는데...
(많이 딜레이 걸림, 대답을 안한 것과 같네)

oracle hint에 대해서 얘기 해봐라

optimizer가 hint를 참조해서 어떤 테이블을 드라이빙 테이블로 사용할지, 어떤 index를 사용할지에 대해서 지정할 수 있다.

index가 많으면 성능향상?

그건 아니져!!
index 자체로도 리소스이기 때문에 적절한 인덱스 설정이 필요하다고 알고 있다.

힘들었던 프로젝트를 꼽으면?

최근에 3자물류 연계, 오래전으로 돌아보면 첫회사에서 같은 팀의 다른 직원들 업무까지 관여를 많이 해야했던 순간이 힘들었다.

어떻게 문제를 해결했나? 자기 일도 아닌 것도 책임 져야 했을 텐데,

스트레스 받는 일이기도 하지만, 신입 직원 같은 경우에는 시간을 투자해서 진행상황 체크와 조언을 했고, 비슷한 연차의 직원 업무같은 경우에는 자율적으로 두고 주간회의를 통해 관리를 했다.

지금도 메니징을 하는 것인가?

아니다, 첫회사고 딱 한 프로젝트만 그런 역할을 했었다.

그럼 후임자를 독려하면서 일을 진행하다 보면 딜레이가 생길수도 있고, 상사와의 갈등이 생길 수도 있는데 어떻게 해결 했는가?

이 경험이 제가 2년 전 한번 겪은 경험이라 경험이 풍부하지 않고 기억이 흐릿하기도 한데, 그때 당시에는 최대한 팀원들을 독려하고, 간식거리를 사준다던지 조언을 좀 더 하는 방향으로 진행했다.
상사에게는 주기적 보고와 어떤 방법으로 해결하겠다와 같은 제시도 하고 했었고 책임지고 혼나는 일을 담당했다.
(면접관님 웃음)

최근에 관심있는 기술 트렌드가 있느냐? 우리가 신기술을 많이 사용해서 트렌드에 민감한 편이다. 그리고 그런 정보는 대게 어디서 얻느냐.

트렌디한 기술을 실제로 사용하진 못했고 블로그나 같이 공부하는 그룹에 동료들에게 정보를 얻는 편.
최신 기술은 아니지만 ELK나 상품 전시 도메인의 꽃은 검색이기 때문에 ES를 사용해보고싶다.
(코틀린을 대답할껄..)

스트레스 관리는 어떻게 하느냐?

잠을 좀 많이 자는 편이고, 영화 보는 것이 취미라 퇴근하고 혼자 영화를 본다던지, 주말에 친구들 만나서 보드게임을 하는 등으로 스트레스 해소를 하고있다.

  • 복지중에 영화 할인있는데 좋겠네

궁금한 것?

  • 합격하게 된다면 어떤 기술을 미리 학습 해 가는게 도움이 될것 같으냐?
    • 현재 코틀린으로 마이그 중이기 때문에 코틀린과 스프링 부트가 좋다.
  • 그럼 이전에 해결했던 이슈나 앞으로 해결해가야 하는 과업은 무엇이 있는가?
    • 너무 깊은 대답은 어렵고, 코틀린 전환 과정중에 아까 얘기 했던 UI/UX 개선이 있다.
    • (전시파트의 꽃은 검색엔진 아냐? ㅠ)

마지막 할말?

면접을 준비하면서 제 자신에 대해서 알게 됬고, 해당 회사가 어떤 회산지도 알게 되서 좋은 시간이였다. 감사하다.

728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

2023년 회고  (0) 2023.12.30
[회고] 2023년 상반기  (0) 2023.07.02
[면접 회고] 20230420 EI사 1차  (0) 2023.04.20
[면접 회고] W사  (0) 2023.02.27
[면접 회고] C사  (0) 2023.02.27

+ Recent posts