전체 글

전체 글

    오마이걸 신곡이 나왔당 😍

    https://youtu.be/nfMUtFhwhDs던던댄스 〰 🎶

    DataAccessUtils

    DataAccessUtils는 유틸 클래스로서 DAO 구현을 위해 사용할 수 있으며 모든 데이터 액세스 기술에 유용하다. 총 9개의 메서드가 있는데, 각 메서드의 내부 구현은 다음과 같다. 내부 구현을 통해 메서드의 목적을 잘 드러내고 있는 것 같아 구체적인 설명 없이 내부 구현을 기록하기로 했다. 1. intResult public static int intResult(@Nullable Collection results) throws IncorrectResultSizeDataAccessException, TypeMismatchDataAccessException { return objectResult(results, Number.class).intValue(); } 2. longResult public ..

    Annotation

    About Annotation 우선 어노테이션이란 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 어노테이션의 용도 중 가장 큰 비중을 차지하는 것은 메타 데이터로서의 역할이다. 메타 데이터 : 데이터를 위한 데이터를 의미하며, 자신의 정보를 담고 있는 데이터를 이야기한다. 어노테이션은 어떻게 구성되어 있을까? @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { boolean isCheck() default true; } 먼저, 어노테이션의 선언에 쓰인 어노테이션은 메타 어노테이션이라 하며 이를 이용해 커스텀 어노테이션을 작성할 수 있다. 메타 어노테이션의 종..

    Validator

    요청으로 들어오는 값의 유효성 검사를 Validator를 이용해 진행해보자. 우선, 내가 검증할 내용은 다음과 같다. public class StationRequest { private String name; public String getName(){ return name; } } StationRequest라는 객체가 존재한다. 이 객체는 이름을 받아 넘겨주는 DTO의 역할을 수행한다. 여기서 제약 사항은, name은 널이 되어서는 안되며 무조건 이름 뒤에는 "역"이 붙어야한다. (ex. 강남역) 따라서 이 검증을 Validator에게 맡겨보자. 우리가 만들 Custom Validator는 Validator를 구현한다. Validator에는 필수로 구현해야하는 메서드들이 존재하는데, supports와 ..

    SimpleJdbcInsert

    SimpleJdbcInsert는 테이블 명과 컬럼 명만 명시해주면 쿼리문 없이 쉽게 Insert 쿼리를 처리할 수 있다. final SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate) .withTableName("테이블명") .usingGeneratedKeyColumns("키 컬럼"); Map params = new HashMap(담을 값의 개수); params.put("컬럼명", 넣을 값); Long id = simpleJdbcInsert.executeAndReturnKey(params).longValue(); 참고 자료 - docs.spring.io/spring-framework/docs/current/javadoc--api/..

    Dependency Injection

    DI란? DI는 Dependency Injection의 준말로서 의존관계 주입이라고 해석할 수 있다. 먼저 의존(Dependency)에 대해서 이해해보자.의존은, 변경에 의해 영향을 받는 관계를 의미한다. 따라서 A의 변경에 따른 영향이 B에게 전파된다면 A와 B의 관계를 서로 의존한다고 이야기할 수 있다. 다음과 같은 MemberService 객체가 있다고 가정해보자.public class MemberService { private MemberDao memberDao; public void register(Member member){ // 해당 회원이 이미 존재하는지 확인 memberDao.isExist(member); } } MemberService 객체는 DB 에 접근하기 위해 MemberDao 객..

    Nginx와 CloudWatch 연결하기

    nginx를 이용해 서버를 띄우고, 띄운 서버의 로그를 aws cloudwatch로 남겨보자. 우선! nginx를 이용해 서버를 띄우는 부분은 고수 [알리의 블로그 🚀]를 참고하면 해결 가능! 하지만 나는 이렇게 하고 나서도 단번에 해결되지 않았는데, 그 이유는 cloudwatch logs agent를 설치할 때 나의 미스테이크때문에 발생한 것이었다. 우선 EC2의 IAM role을 설정한 뒤, 서버에 cloudwatch logs agent를 설치해야한다. $ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O $ sudo python ./awslogs-agent-setup.py --region ap..

    서버에서 Thread.dump 생성 및 로컬에서 다운로드하기

    1. ps -ef 로 실행중인 프로세스를 확인한다. 2. jstack \[PID\] > \[thread.dump를 저장할 경로\]를 입력한다. 3. BASTION 서버로 접속한다. 4. 바스티온 서버에서 운영 서버의 thread.dump 정보를 가져온다. rsync -avzh ubuntu@ 5. 연결을 끊고, scp 명령을 통해 바스티온 서버의 에 저장된 thread.dump를 로컬에서 다운로드한다. scp -i ubuntu@ . //마지막에 점 있음! 참고 자료 www.baeldung.com/java-thread-dump

    [토비의 스프링] 1장. 오브젝트와 의존관계

    #토비의_스프링 1.1 초난감 DAO 1.2 DAO의 분리 슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법을 템플릿 메서드 패턴이라고 한다. UserDao의 서브클래스의 getConnection() 메소드는 어떤 커넥션 클래스의 오브젝틀르 어떻게 생성할 것인지를 결정하는 방법이라고도 볼 수 있다. 이렇게 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것을 팩토리 메서드 패턴이라고 한다. 아무튼 결론적으로 상속구조를 통해 성격이 다른 관심사항을 분리한 코드를 만들어내고, 서로 덜 영향을 주도록 할 수 있는지!가 중요하다. 하지만 상속을..

    생성한 EC2 인스턴스의 스토리지의 용량을 재부팅 없이 늘리려면 어떻게 해야할까?

    이 글은 docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html를 참고하였습니다. AWS에서는 EBS를 이용하여 스토리지를 구성하고 있다. EBS란 Elastic Block Store의 약자로 일종의 하드디스크라고 생각하면 된다. 필요에 따라서 즉시 생성하고 제거할 수 있다. 또한 스냅샷 기능을 제공하기 때문에 EBS의 현재 상태를 그대로 보존할 수 있다. 더불어 CloudWatch를 통해 EBS의 통계를 열람할 수 있다. 이제, 생성한 EC2 인스턴스의 스토리지 용량을 재부팅없이 늘려보는 실습을 진행해보자. 먼저, 인스턴스 관리 페이지에서 해당 인스턴스에 할당된 볼륨을 확인한다. 이는 AWS EC2 대시..