전체 글 361

DNS (Domain Name System) 동작 원리, 과정

DNS 란? DNS는 브라우저의 주소창에 도메인 네임 (예를 들면, www.naver.com)을 입력하고 접속을 할때, 그 도메인 네임을 이용해서 주소를 가져오는 것을 DNS라고 합니다. 그래서 DNS를 이용해서 특정한 사이트 네임으로 우리가 접근하면, 해당 주소를 가져와서 그 주소에 있는 문서에 편리하게 접근할 수 있습니다. 그럼 DNS는 어떤식으로 동작할까요? DNS 동작 원리 1. 브라우저(크롬 등)의 DNS 캐시를 확인해서, www.naver.com 의 정보가 있는지 확인 2. 해당 정보가 있으면 가져옴. 없으면 다음 단계 3. hosts 파일에 www.naver.com 의 정보가 있는지 확인 4. 해당 정보가 있으면 가져옴. 없으면 다음 단계 5. PC에 저장된 Local DNS가 url에 입력..

Operation/Network 2021.09.15

L4 / L7 로드밸런서 차이 (Load balancer)

로드밸런서는 트래픽을 받아서 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어 입니다. 부하 분산에는 L4 Load Balancer와 L7 Load Balancer가 많이 사용됩니다. L4부터 Port를 다룰 수 있기 때문입니다. 한 대의 서버의 각각의 포트에 여러개의 서비스들을 운영하기 위해서 L4 Layer 위에서 작동하는 Load Balancer가 필요해진 것입니다. 이전에는 비싼 L4 하드웨어 장비를 주로 사용했지만, 현재는 MSA의 등장 등으로 L7 로드밸런싱도 많이 사용하고, AWS ELB, NginX, HaProxy등 다양한 소프트웨어를 사용하고 있습니다. 그렇다면 L4 Load Balancer와 L7 Load Balancer는 어떤 차이점이 있을까요? L4 Load Balancer는 I..

Operation/Network 2021.08.28

PyInstaller로 만든 exe를 py로 디컴파일 ! [ python 3.8 ]

디컴파일을 해야할 일이 생겼는데, 구글링으로 찾은 결과는 전부 uncompyle6을 이용해서 pyc에서 소스를 뽑아내고 있었습니다. 저는 그 방법으로는 도저히 해결되지 않아서 관련 이슈를 찾아보다가 아래와 같은 설명문을 발견했습니다. python 3.7 이상 버전에서는 Uncompyle6은 많은 문제가 발생하고, decompile3을 권장한다는 내용이었습니다. 사용법이 크게 다르진 않지만, decompile3을 다루는 포스팅이 거의 없어서 도움이 되고자 올렸습니다. $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py. $ python get-pip.py. 먼저 pip를 설치해야합니다. 이때 정상적이라면 설치하는 내용이 길게 출력될 것입니다. 만약 그냥 ..

JAVA - 프로젝트 패키지이름 명명(Naming) 관례

패키지 이름은 다른 회사의 다른 애플리케이션과 달라야만 합니다. 예를 들어, 안드로이드 app의 경우 패키지명을 경로로해서 애플리케이션이 설치되는데, 다른 애플리케이션과 패키지명이 같다면 같은 애플리케이션이라고 인식하고 충돌할 것입니다. 아래는 패키지명을 지을 때 권고되는 관례입니다. # 규칙 소문자를 사용 dot(.)으로 그룹을 구분 도메인 주소를 주로 사용 (유일하기 때문) URL에서 순서는 역순 com / kr.co . 회사명 . [플랫폼] . 애플리케이션명 # 예시 com.nexon.maplestory com.nexon.android.maplestorym

Language/Java 2021.02.04

Spring - 프로필 (Profile)

프로필이란 ? 유지보수 작업 중에는 서비스로 운영중인 DB를 사용할 수 없습니다. 그래서 로컬 개발 환경과 실제 서비스 환경은 동일하지 않는 경우가 많습니다. 개발할 때는 로컬 개발 환경에 맞게 데이터베이스 서버의 IP, 계정, 디렉터리 경로, URL등을 수정한 후에, 개발을 끝내고, 다시 실제 서비스 환경으로 변경한 후에 배포해야합니다. 이 때, 실수를 범할 수도 있고 불편하기 때문에 스프링이 제공하는 기능이 프로필(Profile)입니다. 프로필을 이용하면 개발용 프로필, 서비스용 프로필을 하나씩 만들고 원하는 프로필을 이용해서 스프링 컨테이너를 초기화할 수 있습니다. 즉, 프로필을 선택함에 따라 그에 걸맞는 설정을 적용할 수 있습니다. C언어의 #define, #if를 사용해서 국가나 환경에 따라 코..

Server/Spring 2021.01.29

Spring - 서버에서 객체를 JSON으로 변환 후 응답하기 (+ API 서버 만들기)

JSON 응답? 클라이언트는 서버를 거쳐서 DB에 접근합니다. 클라이언트가 DB에서 필요한 정보를 얻기 위해, 서버에게 데이터를 요청하면 서버에서는 클라이언트가 필요한 데이터 또는 그 데이터가 포함된 데이터를 보내줍니다. 이 때, 서버가 보내주는 데이터는 클라이언트가 해석하기 쉬우면 좋고, 내용이 간결해서 전송속도가 빠르면 좋을 것입니다. 그래서 사용하는 데이터의 형식 중 대표적인 하나가 JSON입니다. API 서버를 만들고, DB의 데이터를 꺼내서 JSON으로 변환하고, 생성한 API 서버에 출력하는 예제를 진행해보겠습니다. 클라이언트는 생성한 API 서버의 url로 접속(요청)해서 JSON 데이터를 가져가서 원하는 로직을 굴릴 수 있을 것입니다. Jackson 라이브러리 의존 추가 Jackson 라이..

Server/Spring 2021.01.28

Spring - 쿠키(Cookie)를 활용한 ID 저장하기 ../ 아이디 기억하기

쿠키란 ? 쿠키는 편리와 안전을 위해 웹서버에서 클라이언트(브라우저)를 거쳐 사용자의 장치에 설치되는 기록 정보입니다. 현재 쿠키는 웹사이트 접속시 로그인 정보나 사이트의 환경 설정, 항목 즐겨찾기, 최근 기록 등을 저장하는 등 다양하게 사용되고 있습니다. 사용자가 로그인 했던 ID를 저장해서 사용자가 로그인 할 때마다 번거롭게 ID를 입력하지 않게 하기 위해 쿠키를 사용하는 용도면 괜찮지만 쿠키로 자동 로그인을 구현하면 해킹당할 위험이 커집니다. 세션과 달리 쿠키는 서버측이 아니라 클라이언트에 데이터가 저장되기 때문에 PC에 개인 정보들이 흔적으로 남기 때문입니다. 대신, 서버측에서 데이터를 저장하는 세션과 달리 쿠키는 클라이언트측에서 데이터를 저장하므로 서버의 부담을 줄일 수 있습니다. 그리고 브라우..

Server/Spring 2021.01.21

Spring - 컨트롤러(Controller) 구현

GET / POST 방식 구현 @Controller public class RegisterController { @PostMapping("/submitReg") // GetMapping("/submitReg") public String register() { return "submitReg"; } } POST 방식으로 통신하려면 @PostMapping을 사용하고 GET 방식은 @GetMapping을 사용합니다. 각각 작성하면 전송 방식에 따라 다른 메서드가 처리하게 구현할 수도 있습니다 (메서드 이름은 경로와 상관없기 때문). 전송 방식에 상관없이 지정한 경로와 일치하는 요청을 처리하고 싶다면 @RequestMapping을 사용합니다. +스프링 4.2 버전 까지는 @RequestMapping의 metho..

Server/Spring 2021.01.01

MySQL - 파티션(Partition), 테이블 분할

파티션(Partition)이란 ? 크기가 큰 테이블에 쿼리를 수행할 때, 인덱스를 사용한다 하더라도, 테이블의 크기가 매우 크다면 MySQL에 상당한 부하가 걸리게 될 것입니다. MySQL은 크기가 큰 테이블을 물리적으로 여러 개로 분할하는 파티션(Partition) 기능을 제공합니다. 파티션은 실무에서도 MySQL의 부하를 줄이기 위해서(성능 향상) 유용하게 사용되며 적극 권장됩니다. 예시로 유저의 지역(시)나 나이(10대, 20대, 30대) 별로 유저 테이블을 분할하거나, 주문 년도 별로 주문 기록 테이블을 분할하는데 사용할 수 있습니다. * 파티션을 많이 나누는 경우에는 시스템 변수 open_file_limit(동시에 열 수 있는 파일 수의 Max)를 높게 수정해야 합니다. 파티션 형식 MySQL의..

Database/SQL 2020.12.31