전체 글

프로젝트/팀 프로젝트 - MyPill

Ncloud 크레딧 사용 후기

멋쟁이사자처럼 3기 백엔드 스쿨을 수강하면서, 웹 배포 분야도 배우게 되었다. 이와 관련해서 Naver Cloud Platform 에서 예비/주니어 개발자를 위해 크레딧을 지급하는 서비스에 대해 소개받았다. 소개받기 전에는 AWS 에 대해서만 알고 있었는데, AWS 프리티어를 사용 하고 요금 폭탄을 맞았다는 말을 많이 들어 조심스러웠다. 네이버 클라우드 플랫폼의 크레딧 덕분에 요금 폭탄 걱정 없이 배포를 진행했다. 신규 가입 10만원 크레딧을 제공했고, 이후 20만원의 크레딧이 제공되었다. 20만원의 크레딧은 아마 멋쟁이사자처럼 측과 연계하여 지급되는 것 같다. 이후 70만 크레딧을 추가로 제공한다고 한다. 사용 내용 멋사 수업기간 중 4주 프로젝트를 2회 진행했는데, 두 프로젝트 모두 내가 배포를 맡게..

프로젝트/팀 프로젝트 - MyPill

[트러블 슈팅] - MultipartFile 테스트 케이스

배경 이전에 언급한 MultipartFile 처리와 연결되는 이슈다. [트러블 슈팅] - MultipartFile 예외 처리 배경 프로젝트에서 게시글 작성 시 이미지를 첨부하는 기능을 추가했다. 이미지는 MultipartFile의 형태로, 프론트로부터 받아왔다. 기존 게시글 작성 메서드에 매개변수로 MultipartFile을 추가했고, hojunking.tistory.com 이미지 첨부 기능을 추가하면서, 게시물을 작성하는 create 메소드에 MultipartFile을 매개변수로 추가되었다. create 메소드에 대한 기존 테스트 케이스는 이미지 첨부 기능 이전에 작성하였기에 수정이 필요했다. 문제 상황 이전에 작성한 글에 나오는 이슈와 마찬가지로 null 값을 매개변수로 전달하는 방식을 시도했다. 그..

프로젝트/팀 프로젝트 - MyPill

[리팩토링] @NotNull vs @Column(nullable = false)

배경 프로젝트 MyPill은 도메인을 나누었고, 독립적으로 개발을 진행했다. 전체 리팩토링 과정에서 살펴보니 @NotNull 과 @Column(nullable = false) 를 혼용해서 사용하고 있었다. 필드에 Null 값이 들어올 수 없다는 공통적인 목적을 가진 것인데, 통일시키기 이전에 두 방식의 차이가 궁금해 찾아보았다. 공통 환경 엔티티 @Entity @Getter @Builder @AllArgsConstructor @NoArgsConstructor @Table(name = "categories") public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "category_id") p..

프로젝트/팀 프로젝트 - MyPill

[트러블 슈팅] - MultipartFile 예외 처리

배경 프로젝트에서 게시글 작성 시 이미지를 첨부하는 기능을 추가했다. 이미지는 MultipartFile의 형태로, 프론트로부터 받아왔다. 기존 게시글 작성 메서드에 매개변수로 MultipartFile을 추가했고, 이미지를 처리하는 코드를 추가했다. 이미지를 추가하지 않은 게시글이 존재하도록 설계했기 때문에, 이미지를 추가했을 때에만 이미지 처리 작업이 진행되어야 했다. 따라서, 이미지 추가 여부를 확인하는 예외 처리 코드를 작성했다. 그러나, 코드가 원하는 방식으로 작동하지 않았다. 문제 상황 이미지를 처리하지 않았을 때 MultipartFile 이 null 값을 반환할 것이라고 예상했다. 따라서, 예외 처리를 위해 다음과 같은 코드를 추가하였다. if(multipartFile != null){ //이미..

프로젝트/팀 프로젝트 - MyPill

[개선 작업] @Value → @ConfigurationProperties

배경 프로젝트 기간이 끝난 후 서면 피드백을 받았다. 발표 직후 받은 피드백을 포함하여 정리한 내용은 다음과 같다. 1. 테스트가 실패했다. 2. @Value 대신 @ConfigurationProperties 사용을 고려해 봐라 실제로, 시크릿 키를 담은 “Application-secret.yml”이 없을 때 테스트가 실패했다. 테스트 실패 원인은 @Value 때문이 아니었고, 간단하게 해결했다. 따라서, @ConfigurationProperties에 대해 알아보고 적용했다. 추가 학습 @Value VS @ConfigurationProperties Relaxed Binding @Value는 정확히 일치하게 적어야 해당 값을 매칭할 수 있다. @Configuration은 정확히 일치하지 않아도 특정 규칙을..

Algorithm Practice/Programmers

[JAVA/자바][프로그래머스 181893] 배열 조각하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/181893 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 인덱스가 헷갈려서 노트에 적어가며 풀었다. 접근 방법 1 매 query 작업마다 배열을 갱신한다. 한 작업마다 O(N)의 시간이 소요된다. 시간이 오래 걸리고 코드가 복잡해진다. 접근 방법 2 단순하게 매 작업마다 시작점 포인터(start)와 끝점 포인터(end)를 갱신한다. 한 작업마다 O(1)의 시간이 소요된다. 시간 소요가 적고 코드도 간단하다. 이후 포인터를 이용해 필..

Algorithm Practice/Programmers

[JAVA/자바][프로그래머스 12946] 하노이의 탑

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 "하노이의 탑"은 규칙이 존재하는 대표적인 재귀 문제다. 점화식을 세워서 설계하면 쉽게 구현할 수 있다. (출발지, 경유지, 도착지) 3개의 위치를 선언한다. "N개, 출발지 -> 도착지"의 경우 "N-1개, 출발지 -> 경유지" + "1개, 출발지 -> 도착지" + "N-1개, 경유지 -> 도착지"의 규칙을 가진다. 이를 점화식으로 표현하고 코드로 구현한다. 풀이 이동 정보를 저..

Algorithm Practice/Baekjoon

[JAVA/자바][백준 14939] 불 끄기

문제 https://www.acmicpc.net/problem/14939 14939번: 불 끄기 전구 100개가 10×10 정사각형 모양으로 늘어서 있다. 전구에 달린 스위치를 누르면 그 전구와 위, 아래, 왼쪽, 오른쪽에 있는 전구의 상태도 바뀐다. 전구 100개의 상태가 주어지면 모든 전구를 끄 www.acmicpc.net 접근 방법 무작정 구현을 시작했는데 해결하지 못했다. 이후 검색을 해보며 힌트를 얻었다. 비트마스킹을 이용한 풀이방법밖에 찾지 못했다. 나는 비트마스킹을 잘 모르기에 비트마스킹을 사용하지 않고 그냥 빡세게 구현했다. 원리는 이렇다. 같은 스위치를 여러 번 누르지 않는다. 같은 행위를 반복하면 최적의 해를 구할 수 없다. 완전 탐색으로 100개의 전구를 켜고 끄는 경우를 찾으면 O(..

Computer Science/Computer Network

브라우저 URL 검색 과정

www.github.com을 브라우저에 입력하고 엔터를 쳤을 때, 네트워크 상 어떤 일이 일어나는가? 캐싱, DNS, 라우팅, ARP, 초기연결을 거쳐 컨텐츠를 다운받게 되고 이 후 브라우저 렌더링 과정을 거쳐 깃허브 화면이 나타나게 된다. “캡슐화”, “비캡슐화” 과정을 거쳐서 이뤄지게 된다. Web Cache 사용자가 같은 웹 페이지를 여러 번 요청할 경우, 브라우저는 이미 다운로드한 자원을 다시 서버에서 다운로드하지 않고 캐시된 자원을 사용하여 웹 페이지를 보여준다. 페이지 로딩 속도가 빨라지고, 네트워크 대역폭을 절약할 수 있다. 1. Browser Cache(사설 브라우저 캐시) 클라이언트 로컬 컴퓨터에 저장되는 캐싱 방식이다. 방문한 웹 페이지의 이미지, 스크립트, 스타일 시트 등의 자원들을 ..

Computer Science/Computer Network

URI, URL, URN

URI(Uniform Resource Identifier) Uniform : 리소스를 식별하는 통일된 방식 Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier : 다른 항목과 구분하는데 필요한 정보 즉, 인터넷 상에서 특정 자원(파일)을 나타내는 유일한 주소를 의미한다. 💡 URI는 URL, URN을 하위 개념으로 가진다. URL(Uniform Resource Locator) 리소스가 있는 위치를 지정한 것이다. 위치는 변할 수 있다. 대부분의 경우에서 URI와 같은 의미로 쓰인다. URL 기본 구조 scheme://[userinfo@]host[:port][/path][?query][#fragment] 예시 https://github.com/hojunking96/..

호준송
다락방