목록전체 글 (22)
레넌의 개발 일기
Static Pages와 Dynamic Pages Static Pages Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다. 항상 동일한 페이지를 반환한다. Dynamic Pages 인자의 내용에 맞게 동적인 contents를 반환한다. WAS에 의해서 실행되는 프로그램을 통해서 만들어진 결과물 Web Server (WS) 하드웨어와 소프트웨어로 구분된다. 하드웨어 web server의 소프트웨어와 website의 컴포넌트 파일(HTML, CSS, JS, IMAGES)들을 저장하는 컴퓨터이다. 클라이언트가 웹 서버의 데이터를 주고받을 수 있도록 한다. 소프트웨어 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리한다. 웹 브라우저 클라이언트로부터 HTTP ..
특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이 기능을 사용하면 된다. CascadeType.PERSIST 아래와 같이 Article 엔티티와 Aritcle과 Tag간의 중간 테이블인 ArticleTag 엔티티가 있다. @Entity public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Embedded private Title title; @Embedded private Content content; @Enumerated(value = EnumType.STRING) @Column(nullable = false) private Categor..
젠킨스를 통해 CI/CD 파이프라인을 구축해보자. Jenkins의 Item FreeStyle vs Pipeline FreeStyle 방식은 진입 장벽이 낮고 기존 사용 사례가 많아서 참고할 자료가 풍부하다는 장점이 있다. 하지만 젠킨스 플러그인을 이용한 커스터마이징이 제한적이고, 테스트 혹은 빌드 등의 작업에서 병렬처리를 미지원한다는 점과 다수의 형상관리 Repository와 연계하여 사용할 수 없다는 단점이 있다. Pipeline 방식은 FreeStyle 방식에 비해 진입장벽이 비교적 높고 기존 사용 사례가 적어 참고할 자료가 많이 없다는 단점이 있다. 하지만 커스터마이징의 폭이 넓고 테스트 혹은 빌드 등의 작업에서 병렬 처리를 지원하다는 점과 다수의 형상관리 Repository와 연계하여 사용할 수 ..
자바 설치 sudo apt install openjdk-11-jre jenkins는 자바 기반으로 돌아가기 때문에 자바를 필수적으로 설치해주어야한다. 설치 CLI wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \ /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins Jenkins 실행 sudo service jenkins start Jenkins 상태 확인 sudo service..
CI/CD를 알아보기에 앞서 자주 사용되는 용어들에 대해 정리하고 넘어가고자 한다. 컴파일 - 프로그래머가 작성한 소스코드를 기계어로 변환하는 과정 빌드 - 소스코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정 (빌드안에 컴파일 과정이 포함되어 있다.) 배포 - 빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것 일반적으로 사용하는 CI/CD의 흐름은 위의 그림과 같다. CI가 무엇인지, CD가 무엇인지 알아보자. CI - Continuous Integration 지속적 통합이라는 뜻으로, 개발을 진행하면서도 품질을 관리할 수 있도록 여러명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CI가 없었을 때로 돌아가보자. 옛날 개발자들..
Spring REST Docs Spring REST Docs는 테스트 코드 기반으로 RESTful 문서생성을 돕는 도구로 기본적으로 Asciidoctor를 사용하여 HTML를 생성한다. Spring MVC 테스트 프레임워크로 생성된 snippet을 사용해서 snippet이 올바르지 않으면 생성된 테스트가 실패하여 정확성을 보장해준다. 왜 REST Docs인가? 인수테스트가 있음에도 컨트롤러 테스트를 작성해야하는 불편함이 있지만, 프로덕션 코드에 의존적이지 않다는 점에서 REST Docs가 더 좋다고 생각한다. 또한, Swagger는 API 동작을 테스트하는 데에 더 특화되어 있다고한다. API 문서화를 통해 스펙을 정의하는 것이 목적이라면, 깔끔하고 명료하게 문서화할 수 있는 REST Docs가 더 좋..
JpaAuditing은 무엇일까? Jpa에서는 Audit이라는 기능을 제공하고 있다. Spring Data Jpa 에서 시간에 대한 값을 자동으로 넣어주는 기능이다. 엔티티를 저장하거나 UPDATE하는 경우, 생성 날짜와 수정 날짜를 입력해주어야하는데, 이를 활용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어준다. 예시 1. BaseEntity 생성 후 @EntityListeners(AuditingEntityListener.class) 추가 @Getter @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class BaseEntity { @CreatedDate private LocalDateTime ..
OAuth 2.0 흐름 1. Github 로그인 자원을 요청한다. 2. Github 로그인 URL(client_id, redirect_url, scope)을 응답한다. 3. 로그인 버튼 클릭 시 Github 로그인 페이지로 이동한다. 4. Github은 정보 제공 동의 허용 여부를 물어본다. 5. 사용자가 동의한다. 6. Github은 Authorization Code를 발급해준다. 7. Authorization Code를 전달한다. 8. Client_id, Client_secret, Authorization_code를 전송한다. 9. Github Access Token을 발급해준다. 10. Github Access Token으로 사용자의 프로필 정보를 요청한다. 11. 사용자의 프로필 정보를 반환한다...