본문 바로가기

전체 글

(93)
Etc - 쿠키(cookie)와 세션(session) 쿠키와 세션을 사용하는 이유는 무엇인가? Http 통신의 특징 1] Connectionless(비연결지향): 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는다. 2] Stateless(상태정보 유지안함): 요청에 응답후 접속을 끊기 때문에 클라이언트의 상태 정보를 저장하지 않는다. 위의 내용은 Http 특징이지만, 실제로는 데이터 유지가 필요한 경우가 많다.(대표적인 예로 로그인유지 기능) 따라서 클라이언트와 서버 통신시 정보를 유지하기 위해 쿠키와 세션을 사용하는 것이다. 쿠키(cookie)란? http를 통해 웹사이트에 방문할 때, 그 사이트가 사용하고 있는 서버에서 클라이언트에 저장하는 기록데이터 파일이다. 이 파일을 저장해두었다가 필요시 정보를 읽어서 사용한다. k..
DB - Bulk Insert 실무를 진행하면서 데이터베이스에 대량으로 데이터를 입력이 필요한 상황이 올 수 있다. 이러한 상황에서 사용할 수 있는 방법은 어떤게 있을까? 가장먼저 생각이 나는 방법은, 반복문(for)을 통해서 넣어주는 방법이다. INSERT INTO users(user_id, user_name, user_age) VALUES (1, '가나다', 30); INSERT INTO users(user_id, user_name, user_age) VALUES (2, '라마바', 29); INSERT INTO users(user_id, user_name, user_age) VALUES (3, '사아자', 25); INSERT INTO users(user_id, user_name, user_age) VALUES (4, '차카타'..
Git - SVN과의 비교 면접을 보면서 면접관님께서 Git과 SVN의 차이를 물어보셨었는데, SVN을 쓴게 벌써 5년전일이 되어버렸다.. 막상 차이를 생각하니 떠오르지 않아서 정리를 다시한번 해보고 넘어가보려고한다. (오랫만의 Git 카테고리에 작성하는 글인듯) SVN과 Git의 비교 SVN Git 사용법 간단하며, 쉬움 다소 복잡하고 처음에는 학습하기 어렵다 기능 버전관리에 최적화된 간편한 기능 다양한 기능이 존재. 버전관리의 끝판왕이라 생각한다 프로세스 중앙 집중식 분산 관리식 소스 충돌 위험 매우 높다 권한 설정을 통해 충돌 위험 감소 저장소 백업 여부 저장소 백업이 용이하지 못함 git 저장소만 있으면 Remote 복구는 언제든지 가능 다수 작업 관리 관리에 한계가 존재 분산 작업에 매우 용이하다 작업 내용 복구 불편함 ..
Java - 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴이란? : 객체의 인스턴스가 오직 1개만 생성되는 패턴. 어떤 클래스가 최초 한번만 메모리를 할당하고 (보통 static 영역) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 인스턴스가 필요할 때 만들어내는 것이 아닌 기존 인스턴스를 사용한다. IoC특징을 가지는 Spring FrameWork에서 Bean으로 등록되는 컨테이너들이 싱글톤 패턴을 사용하여 하나의 인스턴스만 생성하여 관리한다. 싱글톤 패턴을 사용하는 이유 - 고정된 메모리 영역을 사용하기 때문에 메모리 낭비를 방지할 수 있다 - 전역으로 사용되는 인스턴스이기 때문에 다른 클래스간에 데이터 공유가 쉽다. - 도메인 관점에서 인스턴스가 한개만 존재할 수 있도록 보증하고 싶은 경우 싱글톤 패턴의 문제점 - 멀티스레드 환경에서..
Server - WS(웹서버)와 WAS(웹어플리케이션서버)의 차이 웹서버(Web Server)는, 정적인 컨텐츠(html, css, js 등)를 제공하는 서버. http 규약에 따라 웹 클라이언트의 요청을 받아들이고 응답을 하는 통신을 하는 것이 주역할 이며, 정적인 페이지를 생성한다. ex) Apache, Nginx WAS(Web Application Server)는, 동적인 컨텐츠를 제공하는 서버. DB조회나 로직 처리를 담당한다. ex) Apache Tomcat, JBoss, Jeus, php-fpm Apache Tomcat: WEB 서버(Container)가 내장되어있음. WAS가 필요한 이유? 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재하는데, 이때 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해주어야 한다. 만약에 정적인 웹서버만을 이용한다..
Java - Checked Exception VS Unchecked Exception Exception에 대해서 간단히 알아보자. 자바에서 예외는 3가지로 나눌 수 있다. - Checked Exception - Unchecked Exception - Error 예외(Exception) 프로그램개발에서 아주 친숙(?)하게 볼 수 있는 단어이다. 이는 프로그램에서 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우(보통 개발자의 실수에서 발생한다) 등등.. 정상적인 프로그램의 흐름이 어긋나는 상황에 발생함을 의미한다. 그리고 자바에서 예외는 개발자가 직접 처리할 수 있기때문에 미리 예측하여 제어가 가능하다. 예외는 Checked Exception과 Unchecked Exception으로 나뉘며, 아래에서 다시 설명할 것이다. 에러(Error) 자바 가상머신에서 ..
Spring - Mybatis 샵(#)과 달러($)의 차이 Mybatis 프레임워크를 사용할 때 XML파일에 쿼리문을 작성한다. 그리고 쿼리문을 작성할때 필요 인자들을 보내주고, 쿼리 바인딩을 사용하여 인자들을 매핑한다. 매핑을 할 때 샵(#)과 달러($)를 사용하는데, 두개의 차이는 무엇일까? SELECT user_id, user_name, user_age, user_email, user_phone FROM users WHERE user_name = #{user_name} SELECT user_id, user_name, user_age, user_email, user_phone FROM users WHERE user_name = ${user_name} 샵(#)으로 쿼리바인딩 파라미터가 String 형태로 들어와 자동적으로 싱글쿼터가 붙어서 [user_name ..
Infra - 로드밸런서와 세션관리 로드밸런서는 실제 웹서비스를 운영하면서 많이 사용하는 컴퓨터 네트워크 기술이다. 로드밸런서를 사용하지 않는 서비스는 거의 없을 정도로 중요한 개념이며, 안정적으로 서비스를 운영할 수 있는 방법이다. 로드밸런서란? 서버에 들어오는 대량의 부하(트래픽)을 분산해주는 장치, 또는 기술을 말한다. 클라이언트와 서버의 중간에 위치하고 있으며 한쪽으로 부하가 집중되지 않도록 트래픽을 관리하고 병럴처리를 통해 각 서버가 최적의 퍼포먼스를 낼 수 있도록 해준다. 웹사이트, 실시간 채팅서버, FTP, DNS 서버 등에 적용하여 사용되고 있다. 인터넷 서비스를 제공할때 로드밸런서는 소프트웨어(apache 등)를 이용한 부하분산이 적용되며, 중간에서 실제 서비스하는 서버와 클라이언트를 포트를 이용하여 중개를 하고있다. 사용..
DB - 인덱스(Index) (B+Tree Index) 인덱스(index)란 무엇인가? DataBase에서는 인덱스(index)를 굉장히 많이 사용한다. 인덱스(index)란 무엇인가? 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시켜주는 자료구조이다. 우리가 수천페이지가 넘는 책에서 필요한 내용을 찾는다고 했을때, 페이지를 차례대로 넘기면서 찾는다면, 처음부터 찾아봐야할 것이고 시간이 많이 소비되어 비효율적으로 내용을 찾을 것이다. 이때, 책에 필요한 내용이 인덱스(차례)에 명시되어있다면, 우리는 그 차례를 보고 해당위치의 페이지로 가서 빠르게 찾을 수 있을 것이다. 데이터베이스의 인덱스는 이러한 원리와 동일하다. 인덱스의 장점과 단점 - 장점 1] 테이블의 데이터를 조회하는 속도가 빨라져서 성능이 향상된다. 2] 전반적..
쿠버네티스(Kubernetes) - 인그레스와 로드밸런서(Load Balancer) 노드포트 추가하기 외부에서 쿠버네티스 클러스터의 내부에 접속하는 가장 쉬운 방법이다. 노드포트 서비스를 설정하면 모든 워커 노드의 특정 포트를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다. = 노드포트 서비스 구성도 = nodeport.yaml apiVersion: v1 kind: Service # 서비스의 이름 metadata: name: np-svc spec: # 셀렉터의 레이블 지정 selector: app: np-pods # 사용할 프로토콜과 포트들을 지정 ports: - name: http protocol: TCP port: 80 targetPort: 80 nodePort: 30000 # 서비스 타입을 설정 type: NodePort - kind를 Service로 변경 - spec에..