일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pandas
- 다익스트라
- BFS
- 알고리즘
- 포트앤어댑터 아키텍처
- 자바
- 위상정렬
- equals
- spring security
- DP
- ddd
- disjoint set
- JPA
- 파이썬
- 헥사고날 아키텍처
- Redis
- 스프링
- series
- 세그먼트 트리
- springboot
- 이펙티브 자바
- 비트마스크
- java
- 백준
- dataframe
- dfs
- 데이터 flow
- docker
- 문자열
- UML
- Today
- Total
목록개발 (95)
코딩못하는사람
아이템29] 이왕이면 제네릭 타입으로 만들라 제네릭(generic)이란? 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미한다. 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시에 타입검사를 미리 수행하면 타입 안정성과 타입 검사에 들어가는 노력을 줄일 수 있다. 클라이언트에서 직접 형변환해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 편하다. 따라서 새로운 타입을 설계할 때 형변환 없이 제네릭 타입을 사용해주자. 제네릭으로의 변경이 필요한 코드를 보고 제네릭으로 고쳐보면서 이해해보자. public class Stack { private Object[] elements; private int size = 0; priva..
[아이템15]클래스와 멤버의 접근 권한을 최소화 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 차이는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로 부터 얼마나 잘 숨겼는지에 의해 결정된다. 잘 설계된 컴포넌트는 모든 내부구현을 숨기고 구현과 API를 깔끔하게 분리해서 서로의 내부 동작방식을 알 필요가 없게된다. 이것을 정보은닉 및 캡슐화라고 부른다. 정보은닉의 장점 시스템 개발 속도 상승 (여러가지 컴포넌트를 병렬적으로 개발 가능) 시스템 관리 비용 절감 (디버깅 및 다른 컴포넌트로 교체하는 부담이 적다) 성능최적화에 도움 소프트웨어 재사용성을 높인다.(외부 의존도가 거의 없고 독자적이라면 낯선 환경에서도 사용가능) 큰 시스템 제작 난이도를 낮춰준다. (전체가 완성되지 않아도 개별 컴포넌트의..
https://www.acmicpc.net/problem/19584 19584번: 난개발 이 사실은 대회에 참가하고 있는 여러분들만 알고 있는 사실이다. 방금 외계인들이 지구를 정복했고 서울시청과 서울시의회를 장악했다. 이들은 인간들이 통근과 통학으로 고통받게 하려고 대 www.acmicpc.net 1.접근 문제의 예시 그림을 보고 고민을 해보면 X축의 값은 필요없고 Y축으로 압축해서 누적합이 가장 큰 곳을 구하면 된다는 생각을 할 수 있다. 통행량을 계속 증가시켜주기 위해서 구간에 대해서 세그먼트 트리도 생각해보고 여러가지 생각해보았지만 y축으로 정렬하여 존재하는 모든 y축을 돌면서 시작지점에는 +,종료지점에는 -를 해주는 방식을 생각했다. 2.풀이 누적합을 어떻게 구할지 생각하는게 중요한 문제이다. ..
JWT Token(JSON Web Token)이란? JWT란? JSON Web Token (JWT) 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해줍니다. 여기서 자가수용적인 방식은 JWT를 사용하는 가장 큰 이유가 됩니다. JWT을 사용하지 않는 이전 인증방식들은 서버에서 접속한 회원의 세션정보를 유지하고 있어야하는 구조였습니다. 그에 따라서 클라이언트가 늘어날수록 서버 자원의 낭비가 심해지는 구조를 가지고있었습니다. 하지만 JWT토큰은 클라이언트에 대하여 무상태(stateless)로 유지하기때문에 훨씬 이상적인 구조입니다. JWT의 핵심내용을 동작 방식과 함께 살펴보겠습니다. 회원 인증 정보 교류 Stateless 동작 방식 ..
[아이템1] 생성자 대신 정적 팩터리 메서드를 고려하자 클라이언트가 클래스의 인스턴스를 얻기 위해서는 보통 public 생성자를 사용했다. 하지만 다른 방법으로 public static 팩토리 메소드를 사용해서 해당 클래스의 인스턴스를 만드는 방법도 있다. public static 팩토리 메소드의 장점 1. 이름을 가질 수 있다. BigInteger.probblePrime를 보자. 기존 생성자로 BigInteger()을 사용하는 것 보다 BigInteger.probblePrime()를 사용하면 만드려는 인스턴스 객체의 특성을 더 알아보기 쉽게 묘사할 수 있다. 2.호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변(immutable) 클래스인 경우나 매번 새로운 객체를 만들 필요가 없는 경우에 미..
처음 웹서비스 제작할때는 생산성을 위해 Spring Data JPA를 사용하여 자동으로 쿼리문을 만들었다. 하지만 API하나하나 수행될때마다 연관된 쿼리가 너무 많이 수행되서 공부한 내용을 바탕으로 성능개선을 해보고자 한다. 이번에 제작한 웹서비스에는 회원간 메세지 기능이 있다. 메시지 엔티티에는 보내는회원과 받는회원이 회원 엔티티를 각각 1:1 단방향 연관관계로 가지고있다. SpringDataJPA를 통해서 처음 만들어낸 Repository 메서드를 보자. public interface MessageRepository extends JpaRepository { List findBySentMember(Member member); List findByReceivedMember(Member member); ..
1.발단 프로젝트를 진행하다보면 생각보다 많은 DTO가 필요했다. 대부분의 DTO에는 롬복의 @Data 어노테이션으로 설정을 해주고 @AllArgsConstructor를 붙혀주었다. 하지만 이러한 DTO들을 활용해서 Controller를 POSTMAN으로 테스트할때 잦은 에러가 나타났다. 여러 코드를 살펴보니 DTO에 @AllArgsConstructor,@NoArgsConstructor 두개다 붙어있는 것을 발견했다. 두개의 정의는 다음과 같다. @AllArgsConstructor - 모든 필드 값을 파라미터로 받는 생성자를 만들어준다. @NoArgsConstructor - 파라미터가 없는 기본 생성자를 생성해준다. 그런데 나는 분명히 전체 모든 필드를받는 생성자를 사용했는데 왜 에러가 날까 코드를 보다..
Spring Data JPA란? 스프링에서 JPA를 쉽게 사용할 수 있도록 지원해주는 모듈이다. CRUD 쿼리를 짜려면 하나의 도메인마다 반복되는 코드를 JPQL로 짜주어야했다. 하지만 Spring Data JPA를 의존성으로 주입받아 사용하게 된다면 우리가 일반적으로 사용하는 모든 메서드(쿼리)를 직접 작성하지 않아도 인터페이스만 만들어 놓는다면 대신 만들어준다. 인터페이스에서 공통으로 제공되는 메서드의 예시는 count, delete, deleteAll, deleteAll, deleteById, existsById, findById, findAll,save ..등이 있다. Spring Data JPA의 동작과정을 보자. Spring Data JPA가 JpaRepository를 확장한 Repositor..
Gradle 이란? 그래들(이하 Gradle)은 그루비(Groovy)를 기반으로 한 빌드 도구. Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구. 처음 SpringBoot로 프로젝트를 만든다면 프로젝트에 필요한 의존성들을 체크하고 Build Tool을 고르게 되면 프로젝트에 의존성 주입이 완료된다. 이렇게 의존성을 주입받아 프로젝트를 진행하다가 필요한 라이브러리를 검색하다 보니 크게 두가지 형태로 나누어져있는 것을 보고 차이점이 궁금했다. Compile VS implementation compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.1' implem..
TDD (Test-Driven Development)란? 이름에서 알 수 있듯이 테스트가 주도하는 개발이라는 뜻이다. 종료조건을 테스트 코드로 미리 정하고 그에 맞춰서 테스트를 통과시키기 위해 개발해 나간다고 생각하면 이해하기 쉽다. 항상 실패하는 테스트를 먼저 작성한다(RED) 테스트가 통과하는 프로덕션 코드를 작성한다(GREEN) 테스트가 통과하면 프로덕션 코드를 리팩토링한다. 위 3단계를 반복하며 점진적으로 개발을 완료시킨다. 프로덕션 코드-프로젝트의 로직을 포함하고 제품(어플리케이션)에서 실행되는 시스템의 부분을 가리킨다 단위 테스트(Unit Test)란? TDD의 첫 단계인 기능 단위의 테스트 코드를 작성하는 것이다. TDD를 하는 것이 아닌 순수하게 테스트 코드를 작성하는 것을 의미한다. 왜 ..