개발 공부 기록하기 108

AWS Access Key 발급받고 사용하기

AWS의 Access Key는 CLI를 사용하거나 AWS의 API를 호출할때 자격증명용으로 사용된다. 발급받는법 AWS에서 Access Key를 발급받는 방법을 먼저 알아보자. 1. IAM을 검색해서 들어간다 2. 사용자 추가 (등록한 사용자가 없는 경우) 사용자 > 사용자 추가를 선택한다. 만약 이미 등록한 사용자가 있다면 그 사용자 정보를 들어가 엑세스 키 발급받기를 바로 누르면 된다. 3. 사용자 세부 정보 설정 적절한 사용자 이름을 입력하고, 엑세스 유형에서 프로그래밍 방식 엑세스를 선택한다. 4. 권한 설정 적절한 권한을 선택해주면 된다. 미리 만들어져 있는 정책에 연결하셔도 되고, 그룹에 추가하셔도 된다. (테스트로 우선 SQS 권한만 가져가 보자... - SQS 공부중 ㅎ...) 5. 태그 ..

짧은 코멘트와 함께하는 이펙티브 자바) #2 생성자에 매개변수가 많다면 빌더를 고려하라

짧은 코멘트 빌더 역시 굉장히 많이 사용하는 패턴이다. 점층적 생성자 패턴과 자바빈즈 패턴은 요즘 코드에서 찾아볼 수 없다. lombok의 @Builder를 사용하여 쉽게 구현할 수 있으며, accessLevel 역시 조정할 수 있다. lombok의 @Builder를 이용해 빌더를 여러개 만들때 빌더 클래스와 메소드 이름을 적절히 조정해줄 필요가 있다. 그렇지 않으면, 오류가 날 수 있는데 빌더 클래스가 동일한 이름으로 2개 이상 존재하기 때문이다. 빌더 정적 팩토리 메소드(이하 정적 팩토리)와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 이를 해결하기 위해서 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했..

짧은 코멘트와 함께하는 이펙티브 자바) #1 생성자 대신 정적 팩토리 메소드를 고려하라

짧은 코멘트 개인적으로 굉장히 애용하는 정적 팩토리 메소드이다 ㅎㅎ lombok에서 @RequiredArgsConstructor 와 같은 어노테이션과 함께 staticName을 제공해주는데, 이는 자동으로 정적 팩토리 메소드를 만들어 주는 것이다. 이와 관련해 팀내 개발자 분들과 의견 교환을 해봤을때는 이를 사용하기는 애매하다는 의견이 다수였다. 꼭 필요한 필드들만 설정하거나 final을 쓰지 못할 이유가 있거나 등등의 어려움이 있기 때문이었다. 어떤 사람은 new Person() 보다 Person.of()가 깔끔해보인다는 이유로 정적 팩토리 메소드를 사용하는 경우도 있다. 나 역시 간혹 그럴 때가 있는데, 이보다 더 좋은 방법은 프로젝트를 구성하는 개발자들이 모여, 어떤 경우에 new를 이용한 객체 생..

내맘대로 정리하는 Real MySQL #16 #17장) 베스트 프랙티스와 응급처치

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 16장. 베스트 프랙틱스 임의 정렬 기준을 아무것도 적용하지 않은 임의의 순서대로 가져오는 방법 SELECT * FROM tb_member ORDER BY RAND() LIMIT 1; record 건수나 WHERE로 걸러진 record 건수가 많다면 문제될 수 있다. 인덱스를 사용한 임의 정렬 임의의 정수 필드를 테이블에 항상 랜덤하게 추가 저장한다. 이 column에 index를 걸어 램던 조회시 random 값을 하나 골라 그 보다 큰 것 3개, 작은 것 3개를 가져와 union을 건다 페이징 인덱스를 사용한다 하더라도 계속해서 다..

내맘대로 정리하는 Real MySQL #14 #15장) 데이터 모델링과 데이터 타입

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 14장 데이터를 모델링할 때 각 개체가 어디서부터 어디까지를 포함할 것인지를 명확히 하는 것은 매우 중요하다. Attribute는 반드시 독자적인 성질을 가지는 하나의 값만을 저장해야 한다 식별 관계 : 부모의 식별자가 자식 엔티티의 레코드를 식별하는데 꼭 필요하다면 그 관계는 식별 관계다. 비식별 관계 : 부모 엔티티의 식별자가 없어도 자식 엔티티의 레코드가 생성될 수 있을 때 비식별 관계를 사용한다. 순환관계를 계층형관계로 고친다고 해서 나아지는 것은 아무것도 없다. 15장 칼럼의 데이터 타입과 길이를 선정할 때 가장 주의해야 할 ..

내맘대로 정리하는 Real MySQL #13.1장) 프로그램 연동 (JDBC)

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 실제로 현장에서 가장 취약한 부분은 애플리케이션과 데이터베이스를 연결하는 인터페이스 부분이다. JDBC와 같은 인터페이스 부분은 애플리케이션과 MySQL 데이터베이스의 중간에 위치하고 있어서 양쪽의 특성을 잘 알지 못하면 최적의 옵션을 선택하기가 쉽지 않다. Connector/J MySQL의 JDBC 이름 JDBC URL MySQL 서버의 정보를 표준 포맷으로 조합한 문자열. 때로는 connection string이라고도 한다 jdbc:mysql:// 은 고정된 값으로 MySQL 서버에 접속하기 위한 JDBC URL 임을 알려주는 프로..

내맘대로 정리하는 Real MySQL #12장) 쿼리 종류별 잠금

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 이번 장에서는 대표적인 SQL 문장별로 어떤 잠금이 사용되고 이러한 잠금을 어떻게 우회할 수 있는지도 함께 살펴보겠다. 대부분의 잠금 관련 내용은 InnoDB 스토리지 엔진을 사용하는 테이블에 대한 내용이다. InnoDB의 기본 잠금 방식 InnoDB에서는 각 쿼리의 패턴별로 사용하는 잠금이 다르다. InnoDB 테이블에서 기본적인 SQL 문장이 어떤 잠금을 필요로 하는지 살펴보자. SELECT SERIALIZABLE 격리 수준에서는 모든 SELECT 쿼리에 자동적으로 LOCK IN SHARE MODE가 덧붙여져서 실행되는 효과를 내기..

Junit5 Parameterized Test 가이드

REF : https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests Parameterized Test와 관련된 공식 document를 번역+요약+개인 의견을 첨부하며 실제 타이핑해본 것을 정리한 포스트입니다...!! Parameterized Test란? 여러 argument를 이용해 테스트를 여러번 돌릴 수 있는 테스트를 할 수 있는 기능 사용하기 위해서는 @Test 대신 @ParameterizedTest 를 붙이면 된다. @ParameterizedTest를 사용하게 되면 최소 하나의 source 어노테이션을 붙여주어야 한다. 예를 들어, 다음 테스트는 배열로 argument를 전달하는 @ValueSorce이다 ..

내맘대로 정리하는 Real MySQL #9장) 사용자 정의 변수

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? MySQL 서버가 정의한 변수가 아니라 사용자가 정의하는 변수를 의미한다. 사용자 변수는 해당 커넥션에서만 유효하기 때문에 항상 세션 변수로 취급된다. 또한 사용자가 언제든지 값을 변경할 수 있기 때문에 동적 변수로 볼 수 있다. 사용자 변수 개요 MySQL의 사용자 변수 이름은 @로 시작한다. 사용자 변수는 저장하는 값에 의해서 그 타입이 정해진다. 저장할 수 있는 타입은 Integer, Decimal, Float, Binary와 문자열 타입만 가능하다. 초기 값을 설정하지 않으면 NULL이 된다. 값을 할당하는 SET 문장은 = 또..

Java OutputStream이란?

InputStream 링크 : lannstark.tistory.com/34 Java InputStream이란? InputStream OutputStream을 실무에서 사용할 때면, 뭔가 알긴 알고 실제로 둘을 활용해 기능을 구현하는데는 전혀 문제가 없지만, 사용할때마다 찾아보게되고 뭔가 정확히 아는 것 같지는 않다라는 느 lannstark.tistory.com OutputStream의 정의 OutputStream 추상 클래스는 데이터가 나가는 통로의 역할에 관해 규정하고 있는 추상 클래스이다. InputStream을 한 번 봤기 때문에 쉽게 이해할 수 있다.. 반대되는 개념이겠거니... OutputStream 주요 메소드 그럼 이제 데이터가 나가는 통로는 어떤 역할을 수행해야 하는지 주요 메소드를 알아보..