본문 바로가기

Study32

(JPA) JPA를 왜사용하나요? JPA 사용 이유 (JPA) JPA를 왜사용하나요? JPA 사용 이유 JPA도 Spring과 마찬가지로 처음 접하고나서 3년차가 되어가고 있습니다. 작년 초 까지만 해도 어떻게 동작하는지 아무것도 모르고 사용하고 있었는데, 작년 중순부터 지금까지 JPA에 대해 공부하며 되돌아보니 그때는 어떻게 사용했었는지 놀라울 따름입니다. JPA를 조금씩 더 알아가며 왜 JPA를 사용하는 것인가에 대해 나름 정리해보려합니다. JPA 사용 이유 Java는 객체지향 언어이고, DataBase(: 이하 DB)는 데이터 중심으로 구성되어 있다. 이 패러다임의 불일치를 해결하기 위해 JPA를 사용한다. (JPA는 ORM(:Object-Relational-Mapping 이다)) 객체는 필드와 메소드를 가지고있고, 상속이 가능하다. 예를들어 팀 객.. 2020. 8. 1.
(Spring) Spring을 왜 사용하나요? Spring 프레임워크 사용 이유 Spring을 왜 사용하나요? Spring 프레임워크 사용 이유 Spring 프레임워크 기반으로 개발을 한지 3년차가 되어갑니다. 처음에는 HttpServlet 객체를 구현해서 게시판을 만들었었는데, 이후 스프링을 접하여 스프링으로 개발하게 되었습니다. 왜 사용하는지 이유는 몰랐고 대부분 기업에서 스프링 기술을 요구하기 때문에 막연히 시작한 것이었는데 이제서야 스프링을 사용하는 이유에 대해 나름대로 정리해보려고 합니다. Spring 프레임워크 사용 이유 Spring은 POJO 방식의 프레임워크이다. 위 그림은 스프링 소스 CTO가 스프링에 대해 설명하기 위해 그린 그림이라고 한다. ※ Spring 프레임워크 = POJO로 구성된 애플리케이션 + POJO가 어떻게 관계를 맺고 동작할 것인가를 담은 설계정보.. 2020. 8. 1.
(Java) ThreadLocal 이란? 테스트 코드, 사용 예시 Java ThreadLocal ThreadLocal 이란? 쓰레드 단위로 로컬 변수를 할당하는 기능을 제공하는 클래스이다. 자바 1.2 버전 부터 제공되고 있다. 간단히 예를 들면 메소드 안에서 선언된 로컬 변수는 메소드가 끝날 때 변수 사용이 종료되고, 리턴하거나 파라메터로 전달해주지 않으면 다른 메소드에서 사용할 수 없다. 하지만 ThreadLocal을 사용하면 쓰레드 범위로 변수가 할당되어 같은 쓰레드라면 다른 메소드에서도 변수 사용이 가능하다. 또한 다른 쓰레드에서 해당 값을 접근하거나, 변경하지 않는 것을 보장한다. ThreadLocale.java /** * This class provides thread-local variables. These variables differ from * the.. 2020. 7. 25.
(동시요청 문제해결) 선착순으로 제공되는 서비스에서 동시요청 문제를 어떻게 해결할까? (Naver는 어떻게?) 동시요청 문제해결 (Naver 사례) 이번에 선착순 쿠폰을 발급하는 프로모션을 진행했는데, 난리가 아니었습니다. 오류난 데이터를 집계하고 고치면서 어떤 방법이 좋았을까 찾아보았습니다. 네이버에서 선착순으로 컨퍼런스 신청을 받을때는 어떻게 구현했을까? 당연히 짧은시간에 엄청난 수의 요청이 들어올것이다. 이전 컨퍼런스 신청 때 구현한 코드를 개선하여 오픈하였다고 한다. 개발 순서 성능 테스트 계획 수립 성능 테스트& 문제발견 데이터베이스 교착 상태 해결 1 일차 - 신청 전: 메모리 누수 문제 해결 - 신청 후: 성능문제, 정원초과 문제 2일차 - 신청 전: 글로벌 캐시, 로컬 캐시 방식 적용 - 신청 후: 결과확인 nGinder: 성능 테스트 도구 Pinpoint: 성능 모니터링 도구 nbase-arc: .. 2020. 7. 20.
(MSA 분산 트랜잭션) 주문-재고관리 어떻게 하지? MSA 분산 트랜잭션 MSA distributed transaction 일반적으로 온라인 커머스 서비스를 하고, 재고가 존재하는 상품을 판매 한다면 주문 - 재고차감- 결제 등의 프로세스가 필요할 것이다. 위 프로세스는 일관성을 유지해야한다. 만약 결제에서 오류가 발생했다면 재고차감, 주문까지 rollback이 되어야 일관성이 유지된다. 모놀리식으로 구성된 서비스라면 위 프로세스를 한트랜잭션으로 묶어버리던지 하는 방법이 있겠지만 MSA 환경에서는 주문, 재고관리, 결제 서비스가 나뉘고 DB도 따로 관리 될것이라 한 트랜잭션으로 처리 하는 것은 기술적으로 어렵고, 처리한다고 해도 한 트랜잭션이 너무 길어져 다른 방법이 필요하다. MSA에서 서비스간 일관성을 유지하는 방법 중 하나로 TTC가 알려져있다. T.. 2020. 7. 19.
(Redis) Redis란? 우아한 Redis 발표영상 후기 https://www.youtube.com/watch?v=mPB2CZiAkKM Cache란? - Cache는 요청결과를 미리 저장해 두었다가 나중에 빠르게 서비스 해주는것을 의미 다이내믹 프로그래밍? 앞의 연산결과를 다시 사용하는 것이 핵심! 예시) factorial -> 20880!을 계산해두면 20881! 은 금방한다 속도 디스크 < 메모리 2:8 파레토 법칙 : 실제 모든 요청은 20의 사용자가 결정한다. Cache 구조 1 - Look aside Cache 1. 웹 서버는 데이터가 존재하는지 Cache 먼저 확인 2. Cache에 데이터가 있으면 Cache에서 가져옴 3. Cache에 없으면 DB에서 읽어옴 4. DB에서 읽은 데이터를 Cache에 저장 Cache 구조 2 - Write Back .. 2020. 7. 18.
Https 통신과정, TCP/IP 핸드 쉐이킹 과정 - http는 서버에 데이터 전송시 암호화되지 않은 방법으로 전송하기 때문에 비밀번호 계좌번호 등 중요한 데이터를 서버로 전송하는 경우 https를 사용하여 통신 권장 * https는 ssl 프로토콜을 기반으로 동작하는 프로토콜이다. * ssl 인증서란 클라이언트와 서버간 통신을 제 3자가 보증해주는 문서이다. 클라이언트가 서버에 접속한 직후 서버가 클라이언트에 인증서 전달 -> 클라이언트는 이 인증서를보고 신뢰할 수 있는 서버인지 확인 후 데이터 전송등 다음절차 수행 * ssl 사용시 장점 1. 전달되는 내용이 다른사람에게 노출되는 것을 막음 2. 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 확인가능 3. 전달되는 내용이 변조되는 것을 막음 * ssl에서 사용하는 암호화의 종류 1. 대칭키 .. 2020. 7. 16.
[구글검색의 기본과 서치콘솔] 웨비나 정리 1. 구글 검색의 작동 원리 웹콘텐츠 구성 크롤링 새로 크롤링, 기존 페이지 추가 및 링크 깨짐등 확인 (색인생성) 페이지 콘텐츠 렌더링 키워드 및 정보들 기록 수십억 개의 웹페이지 1억 GB이상 색인은 단순히 키워드, 검색어 그 이상이다 그래프기반, 웹페이지 정보 + 다른유형의 정보 체계화 검색 알고리즘 - 랭킹시스템의역할 유용한 정보 관련성높은정보 신속한정보제공 - 랭킹시스템 알고리즘 관련성 유용성 출처 전문성 사용자 위치 및 설정 등등 ex) 오늘의 주식 -> 오늘+주식 단어의 뜻보다 오늘의주식정보를 보는것이 더 유용한 정보이다 검색품질 평가 가이드라인이 있음 검색 알고리즘 주요요소 - 검색어 이해 검색어 의미(intent) 를 이해해야함 전구를 바꾸는 방법 - 교체하다 우체국은 외환을 바꿔줄까요 .. 2020. 7. 10.
SQL vs NOSQL (관계형데이터베이스 비 관계형데이터베이스) SQL vs NOSQL 관계형 데이터베이스, 비관계형 데이터저장소인 NOSQL (문서 데이터베이스) 선택 기준 MSA 환경에서 개발을 하다보니 새 서비스가 나올때 마다 이 서비스는 어떤 데이터베이스를 사용하는 것이 좋을까? 고민하는 경우가 많아지는 것 같습니다. 저는 크게 RDB(관계형 데이터베이스), NOSQL(비 관계형, 문서 데이터베이스) 중에 고민하였고 두 데이터베이스 중 선택에 따른 Trade off 몇가지를 정리해보려합니다. 1. 일대다, 다대다 일대다 - NOSQL 다대일, 다대다 - SQL 애플리케이션에서 데이터가 문서와 비슷한 구조라면 (일대다 관계 트리, 보통 한번에 전체트리를 적재) 문서 모델을 사용하는것이 좋습니다. 관계형 모델은 문서와 비슷한 구조를 여러 테이블로 나누어 저장하게되.. 2020. 7. 8.