728x90
전체 글

전체 글

    [백준] 3190번 뱀 (Java)

    백준 3190번 뱀: https://www.acmicpc.net/problem/3190 3190번: 뱀 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따 www.acmicpc.net 아이디어 구현에는 뱀의 몸통 정보를 담은 LinkedList snake와 보드판인 int[] board가 사용된다. 초기에..

    [스프링] 배포용 서버에 데이터베이스 Schema 및 Data 초기 설정하기

    스프링 부트로 개발을 할 때 보통 개발단계에서는 h2를 많이 사용한다. 또한 JPA를 사용하면 하이버네이트가 자동으로 테이블을 생성해주기 때문에 개발 단계에서는 DDL을 신경 쓸 필요가 없다. 하지만 실제 배포 단계에서는 하이버네이트가 자동으로 생성해주는 sql을 사용하는 것은 위험하다. 따라서 spring.jpa.hibernate.ddl-auto을 none으로 설정하고 schema.sql을 작성해주는 편이 좋다. profile 파일 분리 우선 배포용 서버에서 사용하는 profile 파일이랑 개발 단계에서 사용하는 profile 파일을 분리해야 한다. application.yml에서는 dev profile을 활성화시켜주고, 배포할 때는 스크립트 파일에서 따로 real profile을 활성화시켜줄 것이다...

    [JPA] JPA 변경 감지와 병합(merge)

    준영속 엔티티란? 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 임의로 만들어낸 엔티티라도 기존 식별자를 가지고 있는 경우(JPA가 식별할 수 있는 id를 가지고 있는 경우)에는 준영속 엔티티라고 말한다. 준영속 엔티티를 수정하는 2가지 방법 1. 변경 감지 2. 병합(merge) 변경 감지 @Transactional public void update(Item itemParam){ // itemParam : 파라미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); // 같은 엔티티를 조회한다. findItem.setPrice(itemPrice.getPrice()); // 데이터를 수정한다. } 영속성 컨텍스트에서 ..

    [스프링] 프록시 기반 AOP(Aspect Oriented Programming) 정리

    AOP (Aspect Oriented Programming) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. AOP 주요 개념 개념 설명 Aspect 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화 한다. Target Aspect를 적용하는 곳 (클래스, 메소드,...) Advice 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JoinPoint Advice가 적용될 위치, 끼어들 수 있는 지점이..

    [스프링] IoC(Inversion of Control), DI(Dependency Injection), Spring Container, Bean 정리

    의존성 역전(Inversion of Control) IoC란 Inversion of Control의 약어로, 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성하게 하여 가독성 및 코드의 중복, 유지보수를 편하게 할 수 있게 한다. 의존성 주입(Dependency Injection) DI란 Dependency Injection의 약어로, 번역하면 의존성을 주입한다는 말이다. 말 그대로 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입을 시켜주는 방식이다. 무슨 말인지 모르겠으니 아래의 예시를 통해 알아보자. 일반적으로 의존성에 대한 제어권은 객체 자기 자신이 갖는다. 아래의 코드는 Sample이라는 클래스에서 Apple 객체를 불러오는 예제이다. 의존관계는 간단히 말해 new..

    [DevOps] Spring boot, Travis, AWS EC2, S3, CodeDeploy로 CI/CD 환경 구축 2

    지난 글에서는 Travis, S3를 연동하여 S3 버킷에 빌드 된 Jar 파일을 업로드 하는 부분까지 완료했다. 이번 글에서는 CodeDeploy까지 연동하여 자동으로 배포가 되게끔 설정을 해준다. Travis와 AWS S3, CodeDeploy 연동하기 CodeDeploy를 이용하기 전에 배포 대상인 EC2가 CodeDeploy를 연동 받을 수 있게 IAM 역할을 하나 생성해준다. IAM의 사용자와 역할의 차이는? 역할 - AWS 서비스에만 할당할 수 있는 권한 (EC2, CodeDeploy, SQS 등) 사용자 - AWS 서비스 외에 사용할 수 있는 권한 (로컬 PC, IDC 서버 등) 지금 만들 권한은 EC2에서 사용할 것이기 때문에 사용자가 아닌 역할로 처리해준다. 서비스 선택에서는 [AWS 서비..

    [DevOps] Spring boot, Travis, AWS EC2, S3, CodeDeploy로 CI/CD 환경 구축 1

    서비스를 운영할 때 배포 환경 구축은 필수 과제 중 하나이다. 여러 개발자의 코드가 실시간으로 병합되고, 테스트가 수행되는 환경, master 브랜치가 푸시되면 배포가 자동으로 이루어지는 환경을 구축하지 않으면 실수할 여지가 너무나도 많게 된다. 이번 시간에는 spring boot로 개발된 코드를 github에 푸시하면 자동으로 서버에 배포해주는 환경을 구축할 것이다. Travis CI 연동하기 Travis는 github에서 제공하는 무료 CI 서비스이다. 유사 서비스로는 Jenkins, TeamCity 등이 있다. Travis와 github을 연동하기 위해 우선 https://travis-ci.org에 접속해서 github 계정으로 로그인을 한다. 로그인이 되었다면 좌측 상단에 [계정명 -> Setti..

    [스프링] 오픈 api 사용해서 데이터 가져오기 (네이버 영화 검색 api)

    네이버 오픈 api를 사용해서 영화를 검색하는 애플리케이션을 구현해보려고 한다. 오픈 api에 대한 정보를 네이버 오픈 api 검색 > 영화에 있다. 오픈 API 이용 신청 오픈 api를 사용하려면 보통 key가 필요하다. 아무나 막 가져다 쓰는 것을 막기 위해 보통 key를 api 호출 시 header에 넣어서 사용한다. key 발급을 위해 우선 api 이용 신청을 한다. 초록색 버튼의 [오픈 API 이용 신청]을 누르면 애플리케이션 등록 화면이 나오고 본인의 애플리케이션을 등록하면 된다. 등록을 마치면 내 애플리케이션 카테고리에서 Client ID와 Client Secret을 확인할 수 있다. 이 값이 위에서 말한 key 값이다. 코드를 구현하기 전에 Postman으로 테스트를 해보니 정상적으로 반환..

728x90