본문 바로가기
개발자/취업

신입 웹 개발자 면접 질문, 기술 면접 문제 정리 (Java, Spring, JavaScript, CS, 포트폴리오)

by mingutistory 2020. 7. 12.
728x90

면접 준비하면서 정리한 질문들을 notion에 저장해놓고 면접 가면서 계속 보는 방식을 썼었는데 진짜 편했다. 기술 면접 외에도 포트폴리오 관련 내용들도 따로 정리 해 뒀는데 도움이 되었다. 

 

면접 보면서 실제로 들었던 질문들, 기술 면접에서 봤던 문제들은 노란 형광펜으로 표시해두겠다. 

 

🎈 기술 면접

자바

  • OOP란? 객체 지향 프로그래밍이란 ?하나의 클래스를 바탕으로 서로 다른 상태의 인스턴스를 만들면서 다른 행동들을 하게 할 수 있음.↔ 절차지향 : 순차적인 처리 중시. 프로그램 전체가 유기적으로 연결. C언어. 컴퓨터 작업 처리 방식과 유사함.
  • = 코드의 재사용 가능(재활용성), 유지 보수에 용이 ㅔ함.
  • 객체와 객체의 유기적인 상호작용을 통해 프로그램이 동작하는 것. 여기서 객체란 현실의 물체를 의미함. 사람의 사고와 가장 비슷하게 프로그래밍 가능 함.
  • 자바 장점아파치, 스프링과 같은 자바를 지원하는 많은 오픈 소스 프로젝트 존재해서 짧은 개발 시간 내에 안정적인 프로그램 구현 가능.
  • 단점으로는 비교적 속도가 느리다는게 있지만 하드웨어 성능의 발전으로 JVM 기능의 향상 > 속도의 격차가 많이 줄어들었음.
  • 자바 가상 머신 위에서 동작하기 때문에 OS에 독립적임.
  • 메모리 영역?
    • 메소드 영역 : static 변수, 전역변수, class 정보들 저장.
    • stack : 지역변수, 함수(메서드) 등이 할당
    • heap : new 연산자를 통한 동적 할당 된 객체 저장. 가비지 컬렉션에 의해 관리.
  • Primitive type vs Reference type
    • 기본형 (primitive) : stack 메모리 영역에 실제 값을 저장하는 데이터 타입. byte, short, int, long, float, doublle, char, boolean / call by vaue 호출 방식을 사용함.
    • 참조형 (reference) : 메모리 상에 객체가 있는 위치를 저장하는 것. String, 클래스, 인터페이스 .. new 연산자로 정의. 실제 값은 heap에 저장되고 stack에는 메모리 주소만 저장. call by reference
  • 가비지 컬렉션?
  • 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블록을 찾아 다시 사용 가능한 자원으로 회수하는 것. 자동으로 이루어지므로 메모리 영역 관리 할 필요 없음.
  • 전역변수 vs 지역변수
    • 전역변수 : 함수 바깥에 선언하여 클래스 전체에서 사용가능한 변수. 여러 메소드에서 공통적으로 공통적으로 사용 가능.
    • 지역변수 : 함수 속에서 선언하여 해당 함수 속에서만 사용가능한 변수.
  • static 의미?객체를 생성하지 않고도 사용할 수 있는 필드와 메소드. 객체마다 가지고 있을 필요가 없는 공용적인 데이터라면 static으로 선언.
  • 객체 생성을 하지 않고 사용 가능하기 때문에 인스턴스 필드, 메소드를 내부에서 사용 할 수 없음.
  • 정적 멤버 (static) : 메모리 공간 할당 시 처음 설정된 메모리 공간이 변하지 않는 것.
  • String vs StringBuffer vs StringBuilder

String은 new 연산자를 통해 생성되면 인스턴스 메모리 공간이 절대 변하지 않으므로 +, concat과 같은 연산시 메모리의 내용이 변하는 것이 아니라 새로운 String 인스턴스가 생성됨. 이렇게 새로운 문자열이 만들어지면 기본의 문자열은 가비지 콜렉터에 의해 제거되야 함. 문자열 연산이 많아지는 경우 성능이 떨어짐. 하지만 불변하기 때문에 조회가 빠르고 멀티스레드 환경에서 동기화를 신경 쓸 필요 없음.

StringBuffer와 StringBuilder는 String과 다르게 클래스는 한 번만 만들고 메모리의 값을 변경시켜서 문자열을 변경함. 그러므로 문자열 연산이 자주 있을 때 사용하면 좋음.

StringBuffer은 멀티 스레드 환경에서 synchronize 키워드가 가능하므로 동기화가 가능하다. StringBuilder는 동기화를 지원하지 않기 때문에 멀티 스레드 환경에서 적합하지 않음.

  • 접근제한자protected : 같은 패키지, 해당 클래스를 상속받은 외부 패키지의 클래스private : 같은 클래스에서만 접근 가능
  • default : 같은 패키지에서만 접근 가능
  • public : 모든 클래스 접근 가능
  • 객체란?ex) 식당에서 주문의 과정에서 종업원, 손님, 주문서, 메뉴판 ..
  • 우리 주위의 모든 데이터와 기능을 가진 것들이 객체가 될 수 있음.
  • 클래스/인스턴스란?
    • 클래스란? 설계도. 클래스를 통해서 인스턴스 객체 생성 가능.
    • 인스턴스 : 객체가 메모리에 할당되어 실제 메모리를 차지 하는 것.
  • 추상 클래스란?자식 클래스에게 강제성 부여 가능. 이를 통해서 기능 확장 가능.
  • 직접적으로 객체 생성이 불가능하고 클래스를 상속 받아서 오버라이딩하여 사용해야 함.
  • 추상 메소드를 하나 이상 가진 클래스
  • 인터페이스란 ?ex) 키보드. 키보드를 누른다 라는 행위는 같지만 엔터/스페이스바를 눌렀을 때의 결과는 다름. 메소드는 같지만 동작 방식은 다르게 다형성을 주고 싶은 경우 사용.interface, implements, abstract pubilc 메소드, public static final 상수
  • 다중 구현 가능.
  • 협업시 객체의 내부 구조를 모르더라도 인터페이스의 메서드 명만 알면 사용 가능 = 협업에 유리.
  • 모든 메서드가 구현부가 없는 추상메서드로 이루어진 클래스
  • 추상 클래스와 인터페이스의 차이점은 ?추상 클래스는 단일 상속, 인터페이스는 다중 구현 가능.
  • 목적이 다름. 추상 클래스는 추상 메서드를 자식 클레스가 구체화해서 기능 확장에 목적이 있지만 인터페이스는 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능은 각각 구현해야 하는 경우에 사용.
  • 오버라이딩 vs 오버로딩오버로딩이란 같은 클래스 내에서 같은 이름의 메소드를 여러개 정의 하는 것으로 매개변수의 타입이 다르거나 개수가 다름. return 타입과 접근 제한자는 영향 없음.
  • 오버라이딩이란 상속에서 나온 개념. 부모 클래스의 메소드를 자식 클래스의 메소드로 재정의 하는 것. 기능의 확장을 위해서 사용 함.
  • 다형성이란?
  • 하나의 클래스나 함수가 다양한 방식으로 동작 가능 한 것. 오버라이딩과 오버로딩을 통해서 다형성 구현 가능. ex) 게임 > 다양한 캐릭터들에 대해서 동일한 버튼을 클릭해서 다른 스킬을 사용하게 하는 것.
  • 캡슐화 : 데이터 보호, 불필요한 부분은 감출 수 있음.
  • 상속이란 ?자식 클래스의 부모 클래스 메소드 재정의 > 오버라이딩
  • 코드 중복 방지, 공통적인 코드 변경 할 때 시간 단축 가능.
  • 부모 클래스가 가지고 있는 상수, 메소드를 자식 클래스에서 물려 받아 같이 공유하면서 확장하는 것
  • 쓰레드란 ?Thread 클래스, Runnable 인터페이스를 통해 구현 가능단점 : 교착 상태 : 다중 프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정 시간을 기다리고 있는 상태.
    • 멀티 스레드 : 하나의 프로그램에서 둘 이상의 작업이 필요한 경우 사용.
  • 장점 : 빠른 프로세스 생성 가능, 정보 쉽게 공유 가능.
  • 프로세스 내에서 실제로 작업을 수행하는 주체를 의미하며 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행함. 두개 이상 스레드를 가지는 프로세스를 멀티 스레드 프로세스라고 함.
  • JDBC란?Connection, PreparedStatement, ResultSet 등 여러개의 클래스를 생성하고 Exception 처리도 해야 하는 번거로움이 있음 > 반복적인 코드 발생, 생산성 저하.
    • Spring JDBC : 기존의 JDBC 단점 극복, 반복적으로 해야 하는 많은 작업들을 대신 해줌. Connection 열기 닫기, Statement 준비, 실행
      • ConnectionPool : DB와 항상 연결되어 있는 객체들. DB와의 연결을 위해서 사용하는 객체
      • DataSource : ConnectionPool 관리 객체. 커넥션풀 이용해서 연결, 반납하는 작업 수행.
      • pom.xml에서 dependency 추가
  • 자바에서 DB의 종류에 상관 없이 데이터베이스에 더욱 쉽게 접근 할 수 있도록 하는 API.
  • 싱글톤생성자에 private 접근 제어자를 지정해 인스턴스 생성에 제약을 걸고, 단일 객체를 반환 할 수 있도록 정적 메소드를 지원해야 함.
  • 하나의 클래스에 대해 하나의 인스턴스만 만들어서 사용하기 위한 패턴. 커넥션 풀과 같은 객체의 경우 인스턴스를 여러개 만들게 되면 자원 낭비가 되므로 하나만 생성하는 것이 효율적.
  • 직렬화란?

https://ktko.tistory.com/entry/개발자-면접-질문자바-스프링?category=625364

  • 변수 초기화 순서?

https://ktko.tistory.com/entry/개발자-면접-질문자바-스프링?category=625364

  • 제너릭?코드의 안정성과 재사용성을 높여줌 > 객체 타입을 컴파일 시에 체크하고, 형변환을 하지 않아도 됨.
  • ex) ArrayList<String> : ArrayList 객체 내부에 어떤 형태의 클래스가 있는지 확인 가능.
  • 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법.
  • 컬렉션?배열과 다르게 객체를 보관하기 위한 공간을 미리 정의하지 않아도 됨 > 객체의 수를 동적으로 할당 가능하므로 효율성 증대.
    • List, Set, Map (인터페이스)
      • List : 순서 있는 데이터의 집합. 데이터의 중복 허용.
        • ArrayList : 단방향 포인터 구조. 각 데이터에 대한 인덱스를 가짐. 검색에 적합. 삽입, 삭제시 데이터 이후 모든 데이터가 복사 됨으로 빈번한 경우에는 부적합.
        • LinkedList : 양방향 포인터 구조. 데이터의 삽입, 삭제시 해당 노드의 주소지만 바꾸면 되므로 삽입, 삭제가 빈번한 데이터에 적합. 처음부터 노드 순회하므로 검색에는 부적합.
      • Set : 순서를 유지하지 않는 데이터 집합. 데이터 중복 허용하지 않음.
        • HashSet :
        • TreeSet ;
      • Map : Key와 value의 쌍으로 이루어진 데이터 집합. 키는 중복을 허용하지 않고 순서를 유지하지 않음.
        • HashMap
          • containsKey / containsValue : key와 value가 포함되어 있는지 알려준다.
          • put : key, value 형태로 set에 저장함.
          • get : 지정된 key값을 반환함.
          • size() : 개수 반환
  • 다수의 데이터를 다루는데 표준화된 클래스들을 자료구조를 직접 구현하지 않고 편하게 사용 가능 함.
  • == / equals() 차이equals : 내용 비교
  • == : 주소 값 비교
  • length , length(), size()
    • length : 배열 / length() : 문자열 길이 / size() : 컬렉션 프레임워크(arraylist) 타입의 길이
  • JDK / SDK
    • JDK (Java Developmnet Kit) : 자바 프로그램 개발도구. 자바 애플리케이션을 구축하기 위한 핵심 플랫폼 구성 요소.
    • SDK (Software Development Kit) : 개발을 위한 클래스, 컴파일러, 실행도구, 디버깅 툴, 예저 코드, 튜토리얼 등을 모아놓은 환경을 제공하는 것.

자바스크립트

  • Jquery달러 표시를 이용해서 코드가 간결해짐.
  • 자바스크립트의 라이브러리로 자바스크립트를 조금 더 편리하게 사용하기 위한 언어.
  • 부트스트랩
  • CSS를 다루는 프레임 워크
  • AjaxAsynchronous Javascript and XML (비동기식 자바스크립트와 XML)전체 페이지를 새로 고치지 않고 페이지의 일부만을 위한 데이터를 로드하는 기법.
    • 형식
    $.ajax({ url : "", type : 'POST' / 'GET', // 데이터를 post 혹은 get 방식으로 전송 한 뒤 응답을 받는 경우 data : data, // 요청과 함께 서버로 데이터를 전송할 string, map contentType : 'application/json', // 기본 값은 application/x-www-form-urlencodede; charset=UTF-8 dataType : 'json', 'text'...// 서버측에서 전송받은 데이터 형식 xml, json, text.., async : true, // 기본값은 비동기식의 true, false로 설정하면 동기식 success : function(res) { }, error : function(err) { } }); $.each(data, function(index, item) { }
  • 자바스크립트를 이용한 비동기 통신, 클라이언트와 서버간에 Json 또는 XML 형태의 데이터를 주고받는 기술 > 자원과 시간을 아낄 수 있음.
  • XMLHttpRequest
  • 자바스크립트의 라이브러리 중 하나.
  • Json
  • 자바스크립트의 객체를 만드는 표현식으로 key, value로 이루어져 있음. 경량의 DATA를 교환하는 방식.
  • 동기, 비동기비동기 : A를 수행하면서 B를 수행하는 것. 동기 방식보다 복잡하지만 자원을 효율적으로 사용 할 수 있음.
  • 동기 : A, B가 있다면 A를 수행하는 중에는 B를 수행하지 못하는 것을 의미함. 요청을 보낸 뒤 응답을 받아야지 다음 동작이 이루워짐. 설계가 간단하고 직관적이지만 시스템 전체적인 효율이 저하 된다.
  • 콜백함수 Callback Function어떤 특정 함수가 실행을 마친 뒤에 실행되는 함수.
  • 사용하는 이유 중 하나는 비동기 데이터를 처리하기 위함. 다른 함수의 실행이 끝날 때 까지 특정 코드가 실행되지 않게 기다려주는 방법.
  • https://webruden.tistory.com/126
  • 이벤트 루프
  • 자바스크립트는 싱글 스레드로 그 자체로는 비동기 작업을 할 수 없지만, 웹 브라우저의 도움을 받아서 구현이 가능함. 이벤트 루프는 웹 브라우저에서 사용되는 기능 중 하나.
  • DOM
  • Document of Model의 약자.
  • this는 모든 함수 스코프 내에 자동으로 설정되는 특수한 식별자로 함수를 호출하는 방법에 의해 결정.
  • function 키워드 대신 화살표(⇒)를 이용해 간략한 방법으로 함수 선언
  • == 와 ===의 차이점
  • ==은 값의 일치 여부만 확인하고 ===은 타입도 같이 확인함.

데이터베이스

  • JOIN
    • 2개 이상의 테이블을 연결하여 데이터를 검색하는 방법
    • 기본키, 외래키 값을 사용하여 조인한다.
  • Inner Join 교집합, 값이 일치하는 행만 반환함.NULL 값은 포함되지 않음
  • ex) SELECT * FROM TABLE t1 INNER JOIN TABLE t2 ON (t1.칼럼1 = t2.칼럼2);
  • 조인 되는 키 값을 기준으로 둘 이상의 테이블에 존재하는 데이터를 조회하는 것
  • Outer Join 합집합, 한쪽 값이 없더라도 행을 반환
    • Left outer JoinSELECT a., b. from a,b where a.a = b.b(+)
    • ex) SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.칼럼1 = t2.칼럼2;
    • Right outer Join
    • ex) SELECT * FROM t1 RIGHT OUTER JOIN t2 ON t1.칼럼1 = t2.칼럼2;
    • SELECT a., b. FROM a,b where a.a(+) = b.b;
    • Full Outer Joinex) SELECT * FROM a FULL OUTER JOIN b on a.a = b.b;
    • A와 B의 각각의 모든 행을 결합함.
  • 기준 테이블은 NULL 값을 포함한다.
  • 데이터베이스 사용 이유
    • 데이터의 보안성 > 인가된 사용자들만 데이터베이스, 데이터베이스 내의 자원에 접근 가능하도록 계정 관리 또는 접근 권한 설정
    • 데이터의 일관성 > 작업 중 일부 데이터만 변경되어 나머지 데이터와 일치하지 않는 불일치성 배제 가능
    • 데이터 중복 최소화 > 데이터를 통합해서 관리함으로써 자료의 중복과 데이터의 중복 문제 해결 가능
  • 정보, 데이터, 데이터베이스, 데이터베이스관리 시스템 개념
  • DBMS(데이터 베이스 관리 시스템) : Oracle, MySQL, MS-SQL
  • select, from, where, group by, having, order by에 대한 처리 순서where ↔ having : having절은 그룹 함수의 그룹 조건, where 절은 select 할 데이터에 조건을 주는 역할
  • select > from > where > group by > order by
  • SQL이란?
  • 데이터베이스의 질의에 사용되는 언어.
  • DML, DDL, DCL 명령어
    • DML (Data Manipulation Language) : 데이터베이스에 들어있는 데이터를 조작하는, 조회하거나 검색하기 위한 명령어. SELECT, UPDATE, INSERT, DELETE
    • DDL (Data Definition Language) : 테이블 구조를 정의하는데 사용되는 명령어, CREATE, ALTER, DROP, TRUNCATE (초기화)
    • DCL (Data Control Language) : 데이터베이스에 접근하거나 객체에 권한을 주는 등 역할을 하는 언어 commit, rolllback, grant, revoke
  • Commit : 하나의 논리적 단위에 대한 작업이 성공적으로 끝났을 때 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산. DB에 변경 사항을 저장하는 것.
  • 데이터 무결성참조 무결성 : 외래키는 Nulll 값이 올 수 없고, 부모 테이블의 기본키에 종속 되어야 한다.
  • 개체 무결성 : 기본키는 Null 값이 올 수 없고 중복 될 수 없다.
  • 인덱스단점 : 데이터를 가져올 때 성능은 빨라지지만 데이터의 삽입, 변경등이 일어날 때 매번 인덱스가 변경되면 성능이 떨어질 수 있음 > 데이터 필터링을 사용 할 때 적합
  • 데이터를 정렬하여 검색과 정렬 작업의 속도를 높이기 위해 사용되는 것. 예를 들어서 책에서 가장 빨리 내용을 찾을 때 뒤편의 색인을 보면 된다.
  • 정규화삽입, 삭제, 갱신 이상이 있는 관계를 재구성함.
  • 관계형 데이터베이스 설계 시 중복을 최소화하도록 데이터를 구조화하는 작업. 구조 안정성 최대화.
  • 이상 (Anomaly)
    • 갱신 이상 : 속성 값을 갱신 할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생김
    • 삽입 이상 : 데이터 삽입시 의도와 상관없는 값들이 함께 삽입되는 현상
    • 삭제 이상 : 데이터 삭제시 의도와 상관없는 값도 삭제되는 현상
  • Oracle ↔ MySQLMySQL은 단일 DB로 제한되어 있어 매일 수백만번 액세스 해야하는 대용량 DB로는 부적합 함.SQL문 문제 연습하기 > distinct, group by
  • SQL은 80 - 90%가 비슷하지만 서로 없는 명령어 nvl, varchar2 등이 존재함.
  • Oracle은 대용량 처리에 적합함.

스프링

  • 프레임워크란 ?중요한 이유 : 프로그램 개발에 투입되는 개발자가 늘어남에 따라서 전체 시스템의 통합성, 일관성이 부족, 개발 스킬의 차이가 큰 경우 이해하기 힘든 경우 발생하면서 코드의 품질이 떨어 질 수 있음.↔ 라이브러리 : 틀과 구조를 결정한다는 측면에서 프레임워크와 활용도가 유사하지만 특정 기능이 필요한 경우 호출해서 사용하는 것. 프레임워크는 꼭 써야하는 틀이 있는 반면에 라이브러리는 필요한 기능을 호출해서 능동적으로 사용하는 것.
  • 장단점 : 미리 구현해둔 코드를 사용하기 때문에 빨리 개발 할 수 있지만 익숙해지는데 시간이 걸릴 수 있고 의존성이 커지면 언어를 배우는 것이 아니라 프레임워크를 배우게 됩니다.
  • 특정한 틀을 만들어 놓고 거기에 살을 붙여 놓음으로써 프로그램을 만드는 것입니다. 소프트웨어를 만들 때 뼈대가 되는 클래스, 인터페이스, 메서드 등을 미리 구현합니다.
  • ⭐ 스프링 프레임워크란 ?
  • 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크. 하드웨어적인 구성이 필요 없는 경량 프레임워크. 자바 개발을 위한 프레임워크로 종속 객체를 생성해주고 조립해주는 기구로 개발자는 자신의 코드에 필요한 객체는 스프링을 통해서 주입받는 구조로 작성된다.

request → dispatcherServlet (web.xml) → controller → 로직 처리 (service, db 접근) → view 전달 → response

  • ⭐ 전자정부 프레임워크란?
    • 타일즈란? 웹페이지 상단이나 하단에 반복적으로 사용되는 정보를 한 곳으로 모아서 관리하는 프레임워크.
  • 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하는 프레임 워크로 spring, mybatis, jsp, 타일즈의 조합을 이야기 함.
  • dispatcher servlet 이란?
    • 어플리케이션으로 들어오는 모든 request를 받는 관문. request를 실제로 처리할 controller에게 전달하고 그 결과값을 받아서 view에게 전달하여 적절한 응답을 생성 할 수 있도록 흐름을 제어 함.
  • 톰캣 VS 아파치 : HTTP 웹서버 ↔ 아파치 톰캣 : WAS
  • 의존성 주입 DI 이란?
    • 특정 객체에 필요한 객체를 외부에서 결정해서 연결하는 것을 의미함.
    • 스프링에서 원하는 핵심적인 개념 중 하나라고 생각합니다. 설정 파일을 통해서 객체간의 의존관계를 설정하는 것. 직접 객체를 생성하지 않고 스프링에서 객체를 생성한 뒤에 사용할 객체에 주입시켜서 사용하게 하는 것.
  • MVC
    • Model, View, Controller의 합성어로 소프트 웨어 디자인 패턴.
      • Model : 데이터
      • View : jsp 파일들과 같이 실제로 보여지는 페이지.
      • Controller : 사용자들의 요청을 받고 응답을 주는 로직 담당. 사용자가 접근한 url에 따라서 요청사항을 파악하고 요청에 맞는 데이터를 model에 의뢰하고 데이터를 view에 반영해서 사용자에게 보여줌.
    • 장점 : 코드 재사용
  • Model 1 ↔ Model 2
    • Model 1 : Controller 영역과 view 영역을 같이 구현하는 방식. 사용자의 요청을 jsp에서 표현하고 정리하고 처리하게 됨. 빠르게 쉽게 개발이 가능하지만 jsp 파일 자체가 너무 비대해지고 향후 유지보수에 어려움을 겪을 수 있음.
    • Model 2 : Controller 영역과 view 영역을 분리해서 구현한 하는 방식. 웹 브라우저의 요청을 하나의 서블릿이 받게 됨. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 뒤 그 결과를 jsp로 포워딩함. 디자이너와 개발자의 분업이 가능해서 유지보수에 유리하지만 설계에서 어려움을 겪을 수 있음.
    (+) Spring MVC 모델 2 : 스프링 MVC 프레임워크는 스프링이 제공하는 DI, AOP등을 쉽게 사용할 수 있음. DispatcherServlet이 mvc에서의 컨트롤러 부분을 처리함.
  • 쿠키와 세션이란?
    • 비연결성(Connectionless) : 클라이언트가 서버에 요청을 했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식.
    • 비상태성(Stateless) : 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식. 첫번째 통신에서 클라이언트와 데이터를 주고 받았다고 해도, 두번째 통신에서는 데이터 유지하지 않음.
    쿠키(Cookie) : 서버가 사용자의 웹 브라우저에 저장하는 데이터. Key와 Value로 구성되고 String 형태로 이루어져 있음. 브라우저마다 저장되는 쿠키는 다르고 서버에서는 브라우저가 다르면 다른 사용자로 인식함.
    • ex) 방문했던 사이트에 다시 방문했을 때 아이디와 비밀번호 자동 입력, 오늘 이 창을 다시 보지 않기 체크
    • 서버가 가지고 있는 것이 아닌 사용자에게 저장되기 때문에 임의로 고치거나 지울 수 있고 가로채기도 쉬어 보안 취약.
    세션 (Session) : 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구사항을 하나의 상태로 보고 그 상태를 유지시키는 기술. 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸됨. 저장 데이터에 제한이 없고 각 클라이언트에 고유 Session ID를 보유함.
    • ex) 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지 됨
  • 사용 이유? HTTP의 비연결성, 비상태성이라는 특징을 보완하기 위함 > 서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 끊어진다면 서버는 클라이언트가 누구인지 계속 인증해야함. 이는 번거롭고 웹 페이지 로딩을 느리게 하는 요인이되기도함. 이런 점을 해결하기 위한 방법이 쿠키와 세션.
  • servlet vs jsp
    • Servlet : Java에 html이 삽입
    • jsp : html에 java가 삽입.
  • Maven이란?
    • 프로젝트 관리 도구.
    • settings.xml 또는 pom.xml 파일에 필요한 라이브러리만 적으면 maven 다운로드하고 설치 후 경로까지 지정해 줌.
    • maven은 프로젝트 관리 도구로 프로젝트의 모든 단계에 사용하는 개발 도구이지만, 가장 많이 사용되는 용도는 프로젝트에 필요한 라이브러리를 자동으로 관리해주는 빌드 도구이다. 필요한 라이브러리 jar파일을 자동으로 다운 받을 수 있다.
  • AOP란?공통의 관심 사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소함.
  • Aspect Oriented Programming, 관점 지향 프로그래밍. 객체 지향 프로그래밍에서 기능별로 class를 분리했음에도 로그, 트랜젝션 처럼 공통적으로 반복되는 중복 코드가 발생하는 단점을 해결하고자 나온 방식.
  • Springboot vs Spring
    • 스프링 부트는 스프링 프레임워크를 사용하는 프로젝트를 간편하게 셋업할 수 있는 서브 프로젝트임.
  • Mybatis란?SQL문으로 DB에 접근하다보면 경우에 따라 SQL문 변경이 필요한 경우가 있음. mybatis를 활용해 단편적으로 제어문, 반복등의 처리가 가능하여 동적으로 변경이 가능하다.
    • ORM 이란?객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 개념. 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해줌.
    • Object-Relational Mapping
  • 스프링과 마이바티스를 연계하는 라이브러리를 이용하면 직접 sql문을 호출하지 않고 자동화 처리가 가능하다 (?)
  • 기존 JDBC를 이용해서 프로그래밍을 하면 자바 소스 안에 sql문을 작성했지만 xml 파일에 sql문을 작성하므로 추수 수정 시에 다른 곳에는 아무런 영향이 없이 xml 파일만 수정하면 됨. 유지보수에 용이하고 가독성이 좋음.
  • request vs response
    • request : 클라이언트에서 넘어오는 데이터를 받기 위한 객체
    • response : 서버에서 클라이언트로 데이터를 전달하기 위한 객체
  • DAO vs DTO
    • DAO(Data Access Object) 데이터베이스의 데이터에 접근을 위한 객체. 데이터베이스에 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용
    • DTO(Data Transfer Object)
  • Annotaion
    • @Controller : 특정 클래스를 Controller로 등록하는 어노테이션.
    • @RequestMapping : 컨트롤러로 등록된 클래스 내에 특정 메서드를 요청되는 URL과 매칭시키는 어노테이션.
    • @Autowired : Spring에서 자동으로 의존성 주입을 하기 위한 어노테이션.
    • @ResponseBody : 비동기 처리, JSON 형태 데이터 주고 받는 경우
    • @RequestParam : 단일 파라미터를 전달 받을 때 사용함

운영체제 및 CS

  • TDD
  • 테스트 주도 개발. 테스트 케이스를 작성한 이후에 코드를 개발하려는 리팩토링 절차를 밟고 있는 것으로 알고 있음. 직접적으로 사용은 해보지 않았지만 중요성에 관한 이야기를 많이 들었음.
  • Array vs List
    • Array(배열)
    • 다수의 데이터를 묶어 효율적인 관리가 가능한 자료형. 데이터에 접근하기 위한 인덱스 존재하고 이를 통해서 데이터를 가져오기 때문에 조회 속도가 빠름. 데이터의 위치가 인덱스와 맵핑되어 고정되므로 추후 데이터가 삭제되는 경우 배열의 빈 부분의 메모리가 낭비 됨. 정의와 동시에 길이를 지정하며 길이를 바꿀 수 없는 정적 자료형. > 삽입, 삭제 시 리스트보다 느림.
    • List
    • 순서가 있고 중복이 허용됨. ArrayList, LinkedList. 리스트는 자동으로 엘리먼트를 수용할 수 있는 크기가 조정되고, 리스트 내의 실제 개수를 알려줌. > 검색 시 배열보다 느리고 추가, 삭제가 빠름.
  • Stack vs Queue
    • Stack : LIFO, 마지막에 들어온 것이 먼저 나가는 구조. 데이터 삽입 연산을 push, 삭제 연산을 pop이라고 함. 삽입과 삭제가 일어나는 위치는 top. 비어있는 스택에서 원소를 추출하려고 할 때 stack underflow라고 하며, 스택이 넘치ㅣ는 경우에는 stack overflow라고 함. ex) 웹 브라우저에서 뒤로가기, 실행 취소
    • Queue : FIFO, 먼저 들어온 것이 먼저 나간다는 뜻. ex) 은행, 공연장. 한쪽 끝에서는 삽입, 한족 끝에서는 삭제 작업이 이루어짐. 삭제 연산이 수행되는 곳을 front, 삽입 연산이 수행되는 곳을 rear. ex) 우선 순위가 같은 작업 예약, 콜센터 객 대기 시간 ..
  • http vs https
    • http : 웹 서버 통신을 위한 프로토콜, 80번 포트 사용.
    • https : 암호화된 통신을 제공하는 http이므로 느리지만 개인정보등의 보안 유지를 위해서 사용함.
    • 200 : 성공
    • 404 : url을 찾을 수 없음
    • 403 : 요청이 서버에 의해 거부 되었음HTTP 응답코드
  • 웹 통신의 큰 흐름 > 브라우저/서버
  • 브라우저에 도메인을 입력하면 → DNS서버에 IP주소를 요청 → 수신한 IP주소에 해당하는 웹서버에 접속
  • 크로스 브라우징 : 각기 다른 브라우저에서 동일한 정보 제공을 위한 기능. 파이어폭스, 익스플로어, 크롬.
  • URL vs URI : 모든 url은 uri이다.
  • 변수명 상식영어 대소문자 구별
  • maxSpeed와 같이 사용
  • 첫글자 숫자X, 문자/$/_ 가능
  • get/post 방식
    • GET : 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 key와 value가 결합된 쿼리 스트링 형태로 전달하는 것. ?type=get. 길이에 제한이 있으므로 전송 데이터의 한계가 있고 post 방식보다 상대적으로 전송 속도가 빠름
    • POST : 일정 크기 이상의 데이터를 보낼 때 사용. 쿼리 스트링 데이터 뿐만이 아니라 라디오 버튼, 텍스트 박스 같은 객체들의 값고 전송 가능.
    get ↔ post차이점은 get은 데이터를 조회 할 때 ex) 게시물을 확인 할 때 사용하고 post는 서버상의 데이터가 수정 되는 경우 ex) 게시물 추가 및 수정 할 때 사용한다.
  • 둘 다 보안상으로 취약하다. post의 경우 눈에 보이지 않아서 안전해 보일 수 있지만 크롬 개발자 도구를 이용하면 내용을 확인 할 수 있다.

 

 

기술 면접도 중요하지만 확실히 신입의 경우에는 할 수 있다! 열심히 하겠다! 하는 인상이 중요한 것 같았다. 

포트폴리오 관련 질문들은

1) 어떤 부분이 제일 어려웠는지? 어떻게 해결했는지?

2) ~~한 기능 과정에 대해서 설명해주세요

3) 기술적으로 말고 팀원들과의 협업에서 힘들었던 점은?

4) 기능에 관련된 꼬리 질문

  - 채팅 구현이라면 웹소켓을 이용한 이유?

5) 팀 프로젝트에서 어떤 역할을 했나요? 어느 부분 구현했나요?

들이 있었다. 

 

긴장 많이 하는 성격이라 준비도 많이 하는 타입인데 준비 한 만큼 대답 할 수 있는거라고 생각한다. 

300x250

댓글