전체 글 410

Git - Github decktop을 통해 협업하기!!

Git - Github decktop을 통해 협업하기!! 디프만을 통해 최근 프로젝트를 진행하고 있고, 혼자서 공부하던 것에 비해 적용해야 할 것이 많았다. 동아리를 통해 여러 방법을 통해 다른 사람들과 협업하는 것에 배울 수 있었는데, 이 내용에는 Notion, Slack, Kanban등 많은 것들이 있지만 이번에는 Git에 관한 것을 중점적으로 다루려 한다. 공통 개발 저장소 만들고 함께 사용하기 나는 백엔드 팀의 일원이고 동일한 백엔드 직무의 사람들과 함께 개발을 진행해야 한다. 그렇기 때문에 여러 백엔드 팀원이 하나의 프로젝트를 관리하기 위해 공통 개발 저장소를 사용해야 한다. 먼저 함께할 repository를 만든다. 참고로 동아리에서는 이미 동아리 명의로 되어있는 Organizations이 있..

기타 2022.06.12

XSS와 sql injection에 관하여

XSS와 sql injection에 관하여 SQL Injection이란?? 먼저 SQL Injection이란, 이름 그대로 보안상의 취약점을 이용하여 임의의 SQL문을 주입하여 DB에서 이 SQL이 실행되도록 하는 공격이다. 이 SQL Injection은 OWASP Top10중 첫번째에 해당한다. 공격 방법이 간단하고, 이게 성공할 경우 큰 피해를 받게 되는 공격이다. 어떤 공격인지 예를 들어보자면 공격 방법 예를 들어 user_id user_pass RyooChan 1q2w3e! Michael Jordan bulls23 Magic Johnson Lakers32 위와 같은 유저 정보를 가진 테이블이 있다고 할 때 SELECT user FROM user_table where user_id = '[1..

이론 정리 2022.06.11

대규모 시스템 설계 공부 008

URL 단축기 설계 1단계 문제 이해 및 설계 범위 확정 질문 결과 기본적 기능이 아래와 같다고 한다. URL단축 : 주어진 긴 URL을 훨씬 짧게 줄인다. URL리디렉션 : 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내 높은 가용성과 규모 확장성, 그리고 장애 감내가 요구됨 개략적 추정 쓰기 연산 : 매일 1억 개의 단축 URL생성 초당 쓰기 연산 : 1억/24/3600=1160 읽기 연산 : 읽기 연산과 쓰기 연산 비율은 10:1이라고 하자. 그 경우 읽기 연산은 초당 11600회 발생한다. URL단축 서비스를 10년간 운영한다고 가정하면 1억X365X10=3650억 개의 레코드를 보관해야 한다. 축약 전 URL의 평균 길이는 100이라고 하자 따라서 10년동안 필요한 저장 용량은 3650..

대규모 시스템 설계 공부 007

분산 시스템을 위한 유일 ID 생성기 설계 분산 시스템에서 사용될 유일 ID생성기를 설계할 때 'auto_increment 속성이 설정된 관계형 DB의 PK를 쓰면 되지 않을까?' 할 수도 있는데... 분산 환경에서 이 접근법은 통하지 않는다. DB서버 한 대로는 그 요구를 감당할 수 없을뿐 아니라 여러 DB서버를 쓰는 경우에는 지연시간을 낮추기가 무척 힘들 것이기 때문이다. -> Auto increment는 따로 동기화가 되어있지 않으면 각각의 분산 환경에서 동일한 ID가 나타날 수 있다. -> Auto increment 추가적인 단점은 외부에서 해당 시스템의 id를 예측하기 쉽다는 것이다...이는 트래픽의 파악과 SQL Injection에 취약해지기 쉽다는 단점을 낳는다. 1단계 문제 ..

Spring Data JPA를 통한 CRUD방법에 관하여..(feat 변경감지)

Spring Data JPA를 통한 CRUD방법에 관하여..(feat 변경감지) Spring Data JPA를 사용한 CRUD방법을 구현하면 어떻게 하나? 조회(Read) find나 get을 사용한다. 이 둘의 차이는 여기서 알아보자 저장(Create) save를 사용한다. 이 save에 관해 조금 후에 다시 서술한다. 삭제(Delete) delete를 사용하거나, 실제로 데이터를 삭제하고 싶지 않으면 soft delete를 하면 된다. 이제 변경(Update)를 한다면? Update방식 위에서 데이터 저장에 사용된 save에 대해 먼저 알아보자 얘 코드를 살펴보면 /* * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#s..

Java에서 기본 타입과 참조 타입의 차이

Java에서 기본 타입과 참조 타입의 차이 기본 타입(Primitive Type)이란? == 원시 타입 우리가 실제로 데이터 값을 저장할 때에 사용하는 값이다. 정수형 int, long, short, byte ... 실수형 float, double 문자형 char 논리형 boolean 참조 타입(Reference Type)이란? 이름에서 알 수 있듯, 객체의 번지를 참조하는 타입이다. 즉 객체의 주소를 저장하고, 이를 참조하여 사용하는 타입이라 할 수 있다. String, Long, Integer ... 배열, Enum, 클래스, 인터페이스 등을 사용해서 선언한 변수는 메모리 값을 가지게 되는데, 이런 애들을 참조 타입이라 한다. 둘 간의 간단한 차이 저장 장소의 차이 기본 타입은 스택 영역에, 참조 타..

이론 정리/java 2022.05.15

Spring Data JPA에서 get 과 find의 차이

Spring Data JPA에서 ID를 통하여 어떤 엔티티를 조회하고 싶을 때, 우리는 getById나 findById를 사용한다. 둘 간에 어떤 차이가 있을까?? getById @Override public T getById(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); return em.getReference(getDomainClass(), id); } getById의 내부를 살펴보면 이렇게 나온다. 이 getById는 em.getReferecnce를 이용해서 엔티티를 조회..하는데, 사실 이거는 엔티티가 아니라 프록시를 반환한다는 것이다. 즉, getById를 통해 바로 DB에 검색하는게 아니라, 이를 실제로 사용할 때에 DB에 접근한다는 것이다. 한마디로..

[백준 2133번] 타일 채우기 - java

문제 설명 1. 3XN 크기의 벽을 2X1, 1X2 타일로 채우는 경우의 수를 구해보자! 2. 문제 길이가 겁나 짧다... 그냥 이게 다임 풀이 과정 1. DP문제이다. 참 이 문제는...고민할 내용은 정말정말정말정말 많지만 코드로 구현하면 뭐가 이렇게 짧지? 하는 기분을 준다. 2. DP를 푸는 방법은 개인적으로 처음부터 무식하게 들이박는 수밖에 없다고 생각이 든다. 3X1의 타일의 경우는 못구한다. 3X2의 타일의 경우는 얘네 셋이 나올 것이다. 3X3의 타일의 경우는 못구한다. 3X4의 타일의 경우는 저 위에있는 3X2 타일에다가 추가로 3X2타일을 붙이면 구할 수 있을 것이다. 그런데... 그 방식 말고도 다른 방식으로 타일을 채울 수도 있을 것이다 예를 들어 이런 애들이 추가로 나타나게 될 것이..

알고리즘 공부 2022.05.15

대규모 시스템 설계 공부 006

키-값 저장소 설계 key-value 저장소는 noSql중 하나이다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 키와 값 사이의 이런 연결 관계를 키-값 쌍(pair)이라고 한다. 키-값 쌍에서의 키는 유일해야 하며 해당 키에 매달린 값은 키를 통해서만 접근 가능하다. 키는 텍스트일 수도, 해시 값일수도 있다. 당연히 키는 짧을수록 좋을 것이다(성능상) 값은 무엇이 오든 크게 상관 없다. 키-값 저장소를 한번 설계해 본다. 문제 이해 및 설계 범위 확정 완벽한 설계는 없다. 읽기, 쓰기 그리고 메모리 사용량 사이에 어떤 균형을 찾고, 데이터의 일관성과 가용성 사이에서 타협적 결정을 내린 설계를 만들었다면 쓸만한 답안일 것이다. 다음 특성을 갖는 키-값 저장소를 설계해 보자. 키-값 쌍의..

대규모 시스템 설계 공부 005

수평적 규모 확장을 의해 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다. 요청 또는 데이터를 균등하기 나누기 위해 보편적으로 사용하는 기술이 안정 해시이다. 이 해시 기술이 풀려고 하는 문제부터 좀 더 자세히 알아본다. 해시 키 재배치(rehash) 문제 N개의 캐시 서버가 있다고 할 때, 이 부하를 균등하게 나누는 보편적 방법이 해시 함수를 사용하는 것이다. serverIndex = hash(key)%N (N은 서버의 개수)예를 들어 4개의 서버를 사용한다고 할 때 주어진 각각의 키에 대해 해시 값과 서버 인덱스를 계산하면 이렇게 나온다. 특정 키가 보관된 서버를 알아내기 위해 나머지연산을 f(key)A%4와 같이 적용했다. 예를 들어 hash(key0)%4=1 이면 클라이언트는 캐시에 보관..