프로그래밍 175

0년차 예비 개발자의 2019년 회고 - 우아한테크코스 1기를 마무리하며

2019년에는 많은 일들이 있었다. 아마 내 인생에서 전환점이 되는 사건들이 많아서 그런 것 같기도 하다. 내가 처음으로 서비스를 만들어 보는 경험도 해보고 길고 긴 대학생활을 끝내는 해기도 하고 한국에서 처음으로 취업을 하게 되는 해였다. 보람찬 일도 많았고 아쉬운 일도 많았다. 2019년 중에서 하나를 뽑으라고 한다면 우아한테크코스가 아닐까. 봄에 시작해서 12월 겨울에 끝이 났으니 2019년을 지배한 건 자명한 사실이다. 지금부터 크고 작은 일들에 대한 회고를 해보려고 한다. 2019년 한일 서비스 출시 연초에 it 동아리에서 처음으로 서비스를 출시 해보았다. 내가 서버 개발로 진로를 정하게 된 확실한 계기가 아니었나 한다. 대학생 때 이것저것 시도해보았던 탓일까. 서버 개발이 제일 맘에 들었다. ..

Spring Cloud Config를 활용하여 설정값(properties), 비밀번호 숨겨서 배포하기

Spring Cloud Config Server 구축하기 Spring Cloud Config 를 사용하여 비밀번호나 민감한 key들을 숨겨서 관리하는 방법을 알아보겠습니다. 전체적인 구상도는 다음과 같습니다. 깃허브 private 저장소에 yml 파일을 업로드합니다. 이 yml 파일안에는 민감 정보가 들어있기 때문에 private에 업로드 하였습니다. 그리고 Spring Cloud Config 서버를 만들고 이 서버가 private 저장소에서 파일을 읽어오게 해야합니다. 그렇기 때문에 서버의 공개키를 깃허브 저장소에 등록을 시켜놓아야 합니다. 자세한 내용은 밑에서 보겠습니다. Spring Cloud Server 구축 implementation 'org.springframework.cloud:spring-..

Maven 저장소에 오픈소스 배포하기 - bintray를 통한 배포

모듈 배포하기 이 부분에서 도메인 지식이 하나도 없어서 처음 공부해보면서 정리한 내용입니다. JCenter와 MavenCentral 차이점 스택 오버플로우의 답변을 참고하세요. Jcenter vs. mavenCentral jcenter() and mavenCentral() is a repository for the Gradle plugin in Android Studio Earlier versions of Android Studio used mavenCentral(), and after some time, it switched to jcenter. This is because jcenter() is superior to mavenCentral() in terms of performance and memo..

Pivotal Summit 2019 Seoul 참가기

화요일에 Pivotal Summit 2019 Seoul에 다녀왔다. https://connect.pivotal.io/summit_2019_seoul Pivotal Summit 2019 Pivotal Summit 2019 is coming to APJ! Join us for valuable facetime with expert Pivotal speakers and industry thought leaders in both traditional presentation and informal conversations. We'll discuss the latest developments in DevOps, CI/CD, application d connect.pivotal.io 왼쪽부터 폴 자코스키, 나, 마크 ..

REST API 에러 핸들링 best practice - 에러를 어떻게 내려 주어야 할까

이 글은 baeldung의 'Best Practice For Rest API Error Handling'를 번역하고 실습해본 내용입니다. Best Practice For Rest API Error Handling 소개 REST는 stateless(상태가 없는) 아키텍쳐이며 클라이언트가 서버의 자원에 접근하고 조작할 수 있습니다. 일반적으로, REST는 HTTP를 이용하여 클라이언트가 자원을 얻거나 상태를 바꾸는 API를 제공합니다. 이 튜토리얼에서는 REST API 에러에 대해 best practice를 배워봅니다. HTTP 상태 코드 클라이언트가 서버에 HTTP 요청을 보내면, 그리고 서버가 그 요청을 잘 받았다면, 서버는 반드시 클라이언트에게 그 요청이 성공적으로 처리됐는지 아닌지 알려주어야 합니다...

모던 자바 인 액션 스터디 - 스트림 활용법과 문제 풀어보기

4장 스트림 스트림은 자바 8 API에 새로 추가된 기능입니다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있습니다. 여기서 선언형이란 데이터를 처리하는 임시 구현 코드 대신 질의로 표현하는 것을 말합니다. 또한 스트림을 사용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있습니다. 한마디로 정의하면 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소(Sequence of elements)입니다. 말이 너무 어렵나요? 용어를 하나씩 살펴봅시다. 연속된 요소: 컬렉션과 마찬가지로 스트림은 특정 요소 형식으로 이루어진 연속된 값을 제공합니다. ArrayList와 같은 컬렉션의 주제는 데이터이고 스트림의 주제는 계산식입니다. 소스: 스트림은 소스로부터 ..

모던 자바 인 액션 스터디 - 동작 파라미터, 람다 표현식

2장 동작 파라미터화 코드 전달하기 어떤 상황에서든지 요구사항은 바뀔 수 있습니다. 이에 따라 자바에서는 동작 파라미터라는 것을 이용하여 자주 바뀌는 요구사항에 효과적으로 대응할 수 있습니다. 다음과 같이 동작을 추상화해서 변화하는 요구사항에 대응할 수 있는 코드를 구현하는 방법을 살펴볼까요. public static void main(String[] args) { List inventory = Arrays.asList( new Apple(80, FilteringApples.Color.GREEN), new Apple(155, FilteringApples.Color.GREEN), new Apple(120, FilteringApples.Color.RED)); prettyPrintApple(inventory,..

모던 자바 인 액션 스터디 - 자바 8 의 변화

1장 자바 8, 9, 10, 11 객체지향은 90년대에 각광을 받았습니다. 하나는 캡슐화 덕분에 C에 비해 소프트웨어 엔지니어링적인 문제가 훨씬 적었고 다른 하나는 객체지향 패러다임 덕에 윈도우 95 및 다른 프로그래밍 모델에 쉽게 대응할 수 있었기 때문입니다. 이 패러다임은 '모든 것은 객체다' 라고 요약이 가능합니다. 하지만 프로그래밍 언어 생태계에 변화의 바람이 불기 시작했습니다. 빅데이터라는 도전에 직면하면서 멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 데이터를 효과적으로 처리할 필요성이 생겼습니다. 이에 따라 자바 8에서는 새로운 개념이 추가되었습니다. 자바 함수 프로그래밍 언어에서 함수(function)는 메서드(method)라는 의미로 사용됩니다. 자바의 함수는 이에 더해 수학적인 함수처럼 ..

[Spring] @Transactional 롤백은 언제 되는 걸까? - 예외가 발생했는데도 DB 반영이 된다고?

@Transactional 애노테이션 스프링은 @Transactional 애노테이션이 붙은 클래스에 프록시를 생성합니다. 프록시는 트랜잭션 로직을 메서드 앞뒤에 넣어줍니다. 이 글은 @Transactional 의 롤백에 대해서 다룹니다. rollbackFor이라는 것을 써보면서 어디에 어떻게 적용되는지 알아보겠습니다. 책 정보를 저장하는 아주 간단한 코드입니다. 다음은 책을 저장하는 메서드입니다. @Transactional 애노테이션의 rollbackFor 속성에 대해서 RuntimeException.class를 등록했습니다. 이 애노테이션은 스프링에게 런타임 예외가 발생한다면 롤백을 하라고 말합니다. 그렇다면 rollbackFor 속성을 주지 않는다면 어떻게 될까요? 사실은 스프링은 디폴트로 UnChe..

[Java] Thread(스레드)에 관한 고찰 - 스레드 관련 코드를 어떻게 짜야할까

이번 포스팅은 스레드를 다루는 방법과 이슈들을 소개합니다. 스레드 이슈에 있어서 간단한 예는 두 스레드가 같은 객체를 공유하면서 서로 간섭하며 예상치 못한 결과를 내놓는 것입니다. 예제는 스레드를 공부하면서 한 번 쯤 봤을 만한 아주아주 간단한 예제입니다. 하지만 왜 그렇게 예상치 못한 결과가 되는지 명확히 설명하는 곳이 없어 책을 참고하여 정리를 해보았습니다. 먼저, 아주 간단하고 대중적인 예로 코딩을 해보았습니다. 계산기로 초기화 된 index 값에서 getNextIndex 를 호출하면 다음 번 인덱스를 반환하는 클래스 입니다. 다음과 같이 두 개의 스레드를 만들고 계산기의 인덱스를 각각 1만번 씩 호출을 해보았습니다. 최적의 시나리오는 각각 Set 에 고유한 숫자 1만개씩 보유하는 경우인데요. 사실..

반응형