분류 전체보기
Git, reset과 revert
git을 이용하여 형상관리를 하다보면 예전 상태로 돌려야하는 순간이 있다. 그 때 사용할 수 있는 명령어가 2가지가 있는데, 바로 reset과 revert이다. 그 동안 잘 모르고 사용했고, 사용하면서도 맞겠지? 하고 썼었는데... 이번에 공부를 하면서 보니 정말 위험한 행동이였다. 한 번 정리해보도록 하겠다. git reset git reset은 과거 시점으로 돌아가는 것이다. 예시를 보자. commit은 1부터 7까지 순차적으로 진행되어 있다. 현재 원하는 상황은 스포하기 전 상황으로 돌아가는 것이다.(3번) 이럴 때 사용하는게 git reset이다. git reset 명령어를 이용하면, 2번 commit 시점 직후로 돌아갈 수 있다. git log를 쳐보면 2번 이후의 커밋들이 모두 사라져 있는 것..
AWS Cloud Practitioner Essentials 모듈1
이 글은 AWS training에서 무료로 제공하는 AWS Cloud Practitioner Essentials을 듣고 내용을 정리한 글이다. 강의를 직접 듣고 싶은 사람들은 아래 링크를 통해 들어보기를 바란다. 같이 공부하면 좋겠다. https://www.aws.training/Details/eLearning?id=68459 AWS training and certification www.aws.training 이번 모듈1에서의 학습 목표이다. AWS의 이점을 요약할 수 있다. 온디맨드식 제공과 클라우드 배포의 차이점을 설명할 수 있다. 종량 과금제 모델을 요약 설명할 수 있다. 우선 AWS는 많은 서비스를 제공해주지만 먼저 기본 클라우드 컴퓨팅 모델을 살펴보자. 거의 모든 현대적 컴퓨팅은 기본적인 클라..
컴포넌트의 내부 구현을 숨기자
어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐이다. 오직 API를 통해서만 다른 컴포넌트와 소통하고 서로의 내부 동작 방식에는 전혀 개의치 않게 설계를 해야한다. 이것이 정보 은닉, 혹은 캡슐화라고 불리는 소프트웨어 설계의 근간이 되는 원리이다. 그럼 어떤 장점을 얻게 될까? 시스템 개발 속도를 높여준다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 성능 최적화에 도움을 준다. 각 컴포넌트가 서로 영향을 주지 않기 때문에, 필요한 컴포넌트만 최적화할 수 있다. 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않는 컴포넌트라면 다른 낯선 개발환경에서도 유용히 쓰일 수 있다. 큰 시스템을 제작하는 ..
이진탐색
읽기, 검색, 쓰기, 삭제 배열[]을 사용할 때 생각해야할 요소다. 배열은 RAM에 저장되므로 읽기가 매우 빠르다. 크기를 처음에 정하며, 첫 주소와 인덱스를 통해 바로 해당 값을 읽는다. 검색은 다소 느리다. 배열을 처음부터 순회하는 선형검색을 생각하면 평균적으로는 찾는 값이 중간에 있을 것이고, 최선의 경우는 맨 처음. 최악의 경우는 맨 마지막에 있거나, 아예 없는 경우이다. 쓰기를 생각하면 먼저 배열의 크기를 생각해야 한다. 여유 공간이 있다면 평균적으로는 중간에 데이터가 insert 될 것이고, 넣는 위치의 이후 모든 값들은 오른쪽으로 한 칸씩 밀려나게 될 것이다. 최선의 경우는 맨 마지막에 넣는 경우이며, 바로 insert 가능하다. 최악의 경우는 맨 처음에 넣는 경우이다. 모든 값들이 오른쪽으..
producer-consumer 패턴
producer - consumer패턴은 멀티스레드 디자인 패턴에서 많이 사용되는 패턴 중 하나이다. 한쪽은 producer의 역할. 즉, 어떤 작업을 생성해주는 역할을 하고 나머지 한 쪽은 consumer역할. 생성된 작업을 수행해주는 일을 한다. 그 중간 연결 매개체 역할을 queue가 수행한다. producer ---> queue ---> consumer 작업생성 작업수행 다시 말해 producer는 작업 생성 후 queue에 해당 작업을 넣어주는 일만 하고, consumer는 queue에 들어있는 작업을 꺼내서 작업을 수행하는 일만 한다. 여기서 멀티스레드가 사용되는 부분은 어디일까. producer와 consumer를 각각 멀티스레드로 돌릴 수 있다. producer consumer produc..
대칭키, 비대칭키
어떤 문자 apple을 암호화하고 복호화를 하는 방식에 대해 알아보자. (대칭키와 비대칭키에 대해서만 알아볼거다) 요즘은 암호화 알고리즘이 있을 때 키(key)를 이용해서 암호화를 하고 복호화를 한다. 암호화 복호화 apple -> @#TXV @#TXV -> apple 키 사용 키 사용 A라는 키를 이용하여 암호화 했다면, A라는 키를 이용하여 복호화 한다는 것은 전혀 이상할 것 없는 말이다. 실제로도 그렇게 사용이 된다. 이를 대칭키 방식이라고 한다. 다만 문제가 하나 있다면, 복호화를 하기 위해서 암호화 할 때 사용했던 키를 알아야한다는 것이다. 보통 암호화를 하면, 암호화 된 정보를 상대방에게 전해주고, 상대방은 암호화 된 정보를 해독해서 원래 정보를 읽을 것이다. 문제는 웹(HTTP)의 세계에서는..
JPA 관계 생각해보기
일 대 다 부모 자식 연관관계의 주인 JPA를 사용할 때는 1. 원하는 기능을 구현할 수 있는 DB테이블들을 구성하고 2. 올바른 연관관계를 갖도록 설계하는 것이 가장 중요한 것 같다. 이 후에는 1. DB의 연관관계를 객체의 연관관계로 잘 표현한 후에(ManyToOne, OneToMany 등등..) 2. 기능에 맞는 로직 구현을 하면 된다.