반응형

분류 전체보기 134

[SSAFY] 1차 프로젝트 - 여행 정보 제공 서비스

📢 SSAFY 정책상 해당 프로젝트의 Github 저장소는 private입니다. 💻 프로젝트 페이지와 구조 🧑 맡았던 역할 백엔드: Springboot와 Mybatis로 Rest API 제작, Swagger로 API 문서화 및 테스트 진행 데이터베이스: MariaDB를 기반으로 HeidiSQL 툴에서 DB 구축/관리 💪 기여한 점 Controller, Service, Dto, Dao에 따라 Rest API 제작 Mybatis로 분산된 쿼리문을 XML기반으로 한번에 관리 Springboot에 Swagger를 적용하여 API를 손쉽게 테스트하고, 팀원들과 문서화된 API 공유하며 효율적인 협업을 이끌어냄 ✅ 아쉬웠던 점 비즈니스 로직을 Service에서 구현해서 웹 계층간의 코드 분리를 못함 쿼리문을 작성하..

[Java] Stream API의 기본 메서드 - 2

✅ Stream의 중첩 구조 제거하기 [ FlatMap이란? ] 간혹, 이중 배열 또는 이중 리스트로 되어 있는 데이터를 1차원으로 처리해야 하는 경우가 발생합니다. 이럴 때 중첩 구조를 한 단계 제거하기 위한 중간 연산으로 flatMap을 사용합니다. flatMap은 Function 함수형 인터페이스를 매개 변수로 받고 있는데, 이 매개 변수는 Stream을 extends하여 구현한 객체여야 합니다. 예를 들어, 아래와 같이 요소가 문자열 배열(String[])인 Stream이 있다고 가정하겠습니다. Stream strArrstream = Stream.of( new String[] {"abc", "def", "ghi"}, new String[] {"ABC", "DEF", "GHI"} ); 각 요소의 문..

[Java] Stream API의 기본 메서드 - 1

✅ Stream 생성하기 앞선 포스팅에서 설명한대로 Stream API를 사용하려면 먼저, Stream 객체를 생성해야 합니다. 사용하려는 객체마다 Stream 객체를 생성하는 방법이 다른데, 여기서는 Collection과 Array에 대해서 알아보도록 하겠습니다. // List로부터 Stream 생성 List stones = Arrays.asList("mind", "soul", "power", "time", "space", "reality"); Stream listStream = stones.stream(); // array로 부터 Stream 생성 String[] stones = {"mind", "soul", "power", "time", "space", "reality"}; Stream arrStr..

[Java] 람다식과 함수형 인터페이스

람다식은 Java를 객체지향 언어인 동시에 함수형 프로그래밍이 가능하게 만들었습니다. 지난 포스팅에서 Stream API를 통해 함수형 프로그래밍의 장점들을 살펴보았습니다. 이번 포스팅에서는 Stream 연산들에 매개변수로 활용되는 람다식과 함수형 인터페이스에 대해 알아보겠습니다. ✅ 람다식(Lambda Expression)이란? 간단히 말하자면 메서드를 하나의 식(Expression)으로 표현한 것입니다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 람다식은 함수형 인터페이스를 반환하기 때문에 Streamp API를 정확히 이해하기 위해서는 람다식과 함수형 인터페이스에 대해 알고 있어야 합니다. 메서드를 람다식으로 표현하기 때문에 메서드의 이름과 반환값이 없어지므로, 익명 함수..

[Java] JDK8부터 등장한 Stream API

✅ Stream API란? Java는 객체지향 언어로 함수형 프로그래밍이 불가능했습니다. 하지만, JDK8부터 Stream API와 람다식, 함수형 인터페이스가 등장하면서 Java를 활용한 함수형 프로그래밍이 가능해졌습니다. 그 중 Stream API는 데이터를 추상화하여 처리하는데 자주 사용되는 함수들을 정의해두었습니다. (여기서 데이터 추상화란, 데이터의 종류와 상관없이 똑같은 방식으로 데이터를 처리할 수 있다는 것을 의미. 그만큼 재사용성을 높일 수 있음을 뜻함) 두 가지 예를 통해, Stream API를 사용하지 않은 경우와 사용한 경우를 비교해보겠습니다. 먼저, 배열이나 리스트의 데이터를 정렬하여 출력하고자 할 때, 아래와 같은 코드를 작성하게 됩니다. String[] stoneArr = {"m..

[Spring boot] Nginx를 통한 무중단 배포

지난 포스팅에서 Travics CI를 활용한 배포 자동화 환경을 구축했습니다. 코드를 커밋/푸쉬하면 자동으로 빌드&배포를 통해 완벽한 프로젝트를 유지할 수 있었습니다. 하지만, 새로운 Jar 파일을 실행 및 배포하는 동안, 기존 Jar를 종료시키기 때문에 서비스가 잠시 중단된다는 문제가 남아있습니다. 이번 포스팅에서는 24시간동안 운영되어야하는 서비스를 위한 중단 없는 배포에 대해 알아보겠습니다. ✅ 무중단 배포 무중단 배포 방식에는 몇 가지가 있습니다. AWS에서 블루/그린 무중단 배포도커를 이용한 웹서비스 무중단 배포L4스위치를 이용한 무중단 배포Nginx를 이용한 무중단 배포이 중 오픈소스 SW인 Nginx를 활용합니다. ✅ Nginx의 무중단 배포 Nginx는 가벼움과 높은 성능을 목표로 하는 웹..

[Spring boot] Travis CI를 통한 배포 자동화

교재 8장 EC2 서버에서 프로젝트를 배포한 상태까지 완료했다는 가정하에 진행하겠습니다. 지금까지 쉘 스크립트로 작성된 deploy.sh로 직접 스크립트를 실행하여 푸시된 코드를 배포했습니다. 이러한 과정을 자동으로 만들기 위해 CI/CD 환경을 구축하고, Github에 푸시된 코드를 자동으로 배포하는 과정을 구현하겠습니다. ✅ CI & CD란? CI(Continuous Integration - 지속적인 통합) 코드 버전 관리를 하는 VCS 시스템(Git, SVN 등)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정 코드 레벨의 테스트까지 자동화 어플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 & 테스트되어 공유 저장소에 통합, 여러 명의 개발자가 동시에..

[Spring boot] 소셜 로그인 (Spring Security와 OAuth2.0)

✅ Spring Security란? 스프링 기반 어플리케이션의 보안을 위한 표준으로 막강한 인증과 인가 기능을 가진 프레임워크를 말합니다. 주로 서블릿 필터와 필터체인으로 구성된 위임모델을 사용합니다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있습니다. 또한, 확장성을 고려한 프레임워크로 다양한 요구사항을 쉽게 추가 및 변경할 수 있습니다. 보안용어 Spring Security 레퍼런스나 기술 블로그를 보면, 전문 용어가 많습니다. 빠른 이해를 위해 아래 용어들을 한번 쯤은 익히고 가는 것을 추천드립니다. 접근 주체(principal): 보호된 리소스에 접근하는 대상. 인증(Authentication): 보호된 리소스..

[조사] IT기업의 팀과 직무, 기술 스택

관심있는 IT기업들의 공고와 공통적인 기술 스택, 우대사항들을 정리하였습니다. 순서는 상관없으며, 입사를 희망하는 공고만을 참고 및 채용 설명회, 현직자 인터뷰 등을 참고했습니다. ✅ 우아한 형제들 💻공고명 배달의민족 배민서비스실 서버 개발자 모집 배달의민족 배민플랫폼실 서버 개발자 모집 배달의민족 사장님 대상 셀프서비스 서버 개발자 모집 (데이터 기반으로 사장님들의 비즈니스 성과를 높일 수 있는 방법 모색 중 특히, 데이터들을 어떤 플로우(인프라)로 제공할지, 시각화할지 기술을 고민 중) 🛠 기술스택 Java Spring boot MVC framework MySQL(MariaDB) 기본적인 Linux/Unix 명령어 AWS Micro Services Architecture JPA, Hibernate 👏..

Small talk 2021.07.15

[자료구조] Trie(트라이)에 대한 개념과 활용법

자료구조 Trie란? 일반적으로 트리의 개념 중 하나로, Radix Tree, Prefix Tree라고도 불립니다. 문자열의 자동 완성 기능과 같이 문자열을 저장하고 탐색하는데 유용한 자료구조입니다. ✅Trie의 형태 각 Trie의 노드는 형태의 Map을 가지고 있습니다. 여기서 Key는 하나의 알파벳이 되고, Value는 Key에 해당하는 자식 노드가 됩니다. K-진 트리 구조를 통해 문자열을 저장하는 방식. 영어 사전의 방식을 그대로 차용함. 만약, game이라는 단어를 찾는다면 사전에서 g부터 a, m, e를 순서대로 찾는 방식을 트리 형태로 구현한 것. 즉, 맨 앞의 접두어(prefix)부터 시작하여 단어 전체를 찾아가는 과정. Trie는 문자열 저장을 위한 공간을 많이 쓰지만, 탐색에는 매우 효..

반응형