분류 전체보기
PostgreSQL 설치
PostgreSQL 설치
2020.12.04설치 ```bash sudo yum update -y yum list | grep postgre sudo yum install -y postgresql postgresql-server cat /etc/passwd -- postgres 계정 있는지 확인 ``` init ```bash sudo find / -name initdb 2>/dev/null sudo su - postgres initdb --encoding='utf8' sudo systemctl start postgresql sudo systemctl enable postgresql -- systemd가 알아서 실행 ``` 접근 ```bash sudo su - postgres psql -- postgres 계정으로 postgres DB에 로그인 됨...
Serverless computing platform의 장점
Serverless computing platform의 장점
2020.12.04Lambda에 대해서 적었지만, 이런 식의 Serverless computing platform의 활용처라고 생각하면 됨. N사는 사내에 Lambda라는 플랫폼을 제공하고 있음 Serverless computing platform = Function as a Service(Faas) = event-driven compute platform 별도의 서버 없이 특정 이벤트에 대응하여 코드를 실행하거나, 직접 코드를 실행할 수 있다. 급하게 개발해야 할 때나, 가볍게 개발해야 할 때 서버 신청 / 설정 / 관리 안해도 되니 부담 적음. 배포 필요 없이 수정하면 수정하는대로 바로 반영된다는게 장점. 이러한 플랫폼의 장점과 언제 어떻게 사용하면 유용한지? A. 유저가 직접 기능 확장이 필요할 때 내 생각에 이런 ..
CommonMessageException 정의하기
CommonMessageException 정의하기
2020.11.30CommonMessageException 정의하기 Enum에 OK("1000", "성공") 이런 식으로 정의해놓는건... 분명 좋은 방식이긴 하지만, ```java throw new MyException(dr.getServiceName() + "/" + dr.getCorpName()); ``` 이런 케이스가 커버가 안됨. 특정 메시지나 데이터를 클라이언트 쪽에 내려주고 싶을 때. 다건 업데이트 같은 작업 도중 실패가 발생한 경우, 어느 항목에서 실패가 발생했는지를 클라이언트 쪽에 내려주어야 하는 경우들이 있음. 해결책은? 이런 경우에 사용할 일반적인 Exception을 하나 정의하는 것이 낫다. ```java public class CommonMessageException extends RuntimeEx..
[Java] Collection 초기화
[Java] Collection 초기화
2020.11.02www.baeldung.com/java-init-list-one-line www.baeldung.com/java-initialize-hashmap www.baeldung.com/java-combine-multiple-collections ```java Arrays.asList(“a”, “b”, “c”); String[] strs = {"a", "b", "c"}; ``` 자바의 immutable? ```java private static final Thing[] PRIVATE_VALUES = { ... }; public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES)); ``` ```java retur..
[Java8] CompletableFuture
[Java8] CompletableFuture
2020.10.13runAsync(() -> { Thread.sleep(500); }, executor); CompleatbleFuture에 대해 https://medium.com/@chanhyeonglee/completable-future-가이드-part-1 https://medium.com/@chanhyeonglee/completable-future-가이드-part-2 https://medium.com/@chanhyeonglee/completable-future-가이드-part-3 thenCompose VS thenApply thenCompose VS thenApply thenCompose는 Future 다음에 또 다른 Future를 이어서 실행하게끔 연결할 때 사용 thenApply는 Future 결과를 받았을 때 ..
[Python] 파이썬 버전, 패키지 관리
[Python] 파이썬 버전, 패키지 관리
2020.10.10뭘 쓰든 한가지 방법으로 통일해서 관리하는게 좋음. pyenv / venv / virtualenv / conda 비교 pyenv windows는 지원 안함. python 버전 관리를 위해 쓰는거라. 특정 버전에 종속적인게 아니다. brew install ... python 자체 버전 관리를 위해 사용. 따라서 패키지 관리는 virtualenv 등과 연계해서 사용해야 한다. pyenv 하위로 virtualenv를 사용할 수 있다. (이게 좀 더 낫다.) pyenv-virtualenv를 사용하는 방법이 에러로 불가한 경우? python 버전은 pyenv로 관리하고, 해당 python 버전의 venv 모듈로 가상환경 만들면서 [python + 패키지]를 가상환경으로 묶는 방법을 사용해도 된다. venv pyt..
DB 이중화 / 클러스터링
DB 이중화 / 클러스터링
2020.09.23DB 클러스터링 DB 장애 시 가용성을 유지하기 위한 클러스터링 방안 Oracle 기준이긴 하지만, 다른 DB에서도 비슷한 옵션이 있는 경우 있음. HA ( High Availability ) 같은 장비를 Active 1대 , Standby 1대로 구성해서 Active에 문제 생기면 Standby로 서비스 하는 방식. Active, Standby 각자가 별도 storage를 가지고 있음. => Active와 Standby의 데이터 동기화 문제 및 성능 저하 => Active 가 죽고 Standby로 전환되기 전 그 사이에 발생하는 트랜잭션은 유실됨 - 데이터 불일치. 정합성 bad *** 오라클에서는 데이터 가드 라는 이름으로 제공하고 있다. *** 위와 같은 문제점 때문에 OPS 방식이 8i 버전까지 ..
External Client class에서 Exception을 던지는게 좋을까?
External Client class에서 Exception을 던지는게 좋을까?
2020.08.21예시 API 응답으로 수신하는 code 및 그에 따른 반환값 when (response.code) { 1000 -> 성공 (데이터 반환) 1007 -> 기처리 (데이터 반환) 2000 -> 구분해야하는 실패1 2001 -> 구분해야하는 실패2 else -> 그 외 모든 응답 코드(실패) } 예시 상황에서, External Client class에서 Exception을 직접 던지는게 나을까? 아니면 return 기반으로 가는게 나을까? 둘 다 사용하는 hybrid로 가는게 나을까? External Client class에서 Exception을 직접 던지는 경우 예시) 후술하겠지만 이렇게 처리하는 것은 좋지 않다. AbcClient { fun post() { val response = webClient.po..
[Spring] MVC Layered Architecture : Controller와 Service의 책임 나누기
[Spring] MVC Layered Architecture : Controller와 Service의 책임 나누기
2020.07.06그림으로 정리한 Spring MVC Application Architecture 왜 layer가 필요한가? layer를 왜 분리할까? layer를 분리한다는 것에는 어떤 의미가 있는가? layer를 나누게 되면, 다른 layer를 추상화 할 수 있다. 추상화를 잘 했다면, 관심 분리 를 통해 현재 작업하고 있는 layer에 집중할 수 있다. 다른 layer의 모듈을 부품을 갈아끼우듯 변경할 수 있다. 각 layer가 자신의 세부사항을 몰라도 상관 없도록, 잘 추상화해서 제공하고 있었다면 가능하다. 컴포넌트 간의 의존 계층 관계를 깔끔하게 유지할 수 있다. 각 layer를 넘나들면서 스파게티처럼 꼬여 있는 관계가 아니라, 위에서 아래로 떨어지는 간단한 구조 혹은 복잡한 참조는 같은 계층 내에서 끝내는 등 ..
[Spring] MVC Layered Architecture : Map 보다 Data Class 사용해야 하는 이유
[Spring] MVC Layered Architecture : Map 보다 Data Class 사용해야 하는 이유
2020.06.25Map과 data class는 애초에 용도와 목적이 다르다. Map은 data class 처럼 쓸 수는 있지만, 그렇게 쓰는게 Map의 올바른 사용법이라고 할 수는 없다. Data Class 대용으로 Map을 사용할 때의 단점 타입 정보가 유실되어 type safe 하지 않다는 점. 이게 가장 큰 단점이자 본질적인 단점이다. 꺼낼 때 형변환 필요해서 번거롭다. key 지정을 String으로 하다 보니 잘못된 참조에 대한 컴파일 타임 체크가 불가능하다. fragile. 어떤 필드가 어디서 사용되고 있는건지 IDE의 추적 기능 도움을 받을 수 없어 일일히 따라가보아야 한다. 리팩터링이 굉장히 어렵다.=유지보수가 어렵다. (e.g., 이 필드 삭제 해도 되는걸까?) Map을 Domain Model로 쓴다면? ..
Java Servlet 이란
Java Servlet 이란
2020.06.15Servlet이 무엇인가? A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes..
SameSite Cookie
SameSite Cookie
2020.06.15쿠키(Cookie)와 저장소(Storage) SameSite cookies explained https://web.dev/samesite-cookies-explained/ first-party cookie와 third-party cookie 브라우저는 도메인 별로 쿠키를 저장하고 있다. 따라서 다른 도메인으로 이동한다고 해서 쿠키가 삭제되지 않는다. 다른 사이트 갔다가 돌아왔을 때, 로그인 상태가 유지되는 것은 브라우저가 해당 도메인의 세션 쿠키를 다시 꺼내기 때문이다. 어떤 도메인에 요청할 때, 브라우저는 해당 도메인의 쿠키를 꺼내 헤더에 포함하여 전송하도록 되어 있다. 내가 현재 도메인 A에 있고, 페이지 내에 삽입된 이미지는 외부 도메인 B의 데이터다. 이미지를 불러오기 위하여 외부 도메인 B로 요..