나만의 편의점 찾기 플랫폼 - Fun편log - Fun편log팀은 프론트엔드 개발자 2명 백엔드 개발자 1명이 팀을 이뤄 11월 15일부터 12월 22일까지 포트폴리오 멘토링 프로젝트를 진행했습니다. 프론트엔드 개발자 두 분은 비전공자 개발자로써 독학으로 html/css, React를 공부하였으나 취업에 쓸만한 근사한 포트폴리오가 없어 지원하셨고, 백엔드 개발자 분은 Windows 개발자로 계시다가 백엔드 개발자로 전향하기 위해 지원하셨습니다. 3명의 멘토(설계, 백엔드, 프론트엔드)의 강의, 설계&코드 리뷰를 받으면서 개발을 진행했습니다. 🏠 Github Fro
이번 카우치코딩 수업에서는 학생의 코드를 보고 피드백을 주고 리팩토링을 하는 작업을 진행하였습니다. 그 중 읽기 쉬운 코드를 만들기위해 학생의 코드를 리팩토링 했던 내용을 공유하고자 적어보았습니다. 초보 분들이 코드를 작성할때 참고하면 좋을 것입니다. 너무 구체적인 내용이 포함된 코드 예제 위의 코드는 storeIds에 해당되는 StoreSummary List를 가져와서 DTO로 변경하는 코드입니다.그렇게 읽기 어려운 코드는 아니지만 무엇이 문제였을까요? 너무 구체적인 내용이 있는 코드 처음 Repository에서 StoreSummary를 가져오는 코드는 크게 문제가 없어보입니다. 보면 가져오는구나를 바로 알수 있죠. 그러나 List부터 있는 DTO로 변환하는 코드는 차분히 읽지 않으면 어떤 일을 하는지 바로 알아차리기 힘듭니다. 이럴땐 메서드를 추출하여 하나의 의미있는 이름으로 변경하는 것이 좋습니다. 변경한 코드는 다음과 같습니다. 이제 `
Spring을 처음 배우는 모든 학생 분들이 가장 많이하는 질문이 그냥 Controller에서 전부 구현하면 안되나요? Service를 왜 만들어야하죠? 라는 질문입니다. Controller에 다 구현해도 똑같이 동작하기 떄문에 이런 질문을 가질 수 있습니다. 또한 생각보다 많은 초보 개발자 분들이 왜 이런 구조로 분리하는지 이유를 모르고 다들 분리하기 때문에 그냥 분리합니다. 여러 다른이유로 소프트웨어 아키텍처를 변경해야 할때 유연하게 변경할 수 없습니다. 그러나 원리를 알면 다음에 더 좋은 아키텍처를 만드는데 비슷한 원리를 적용할 수 있습니다. 이번 포스팅에서는 Controller, Service를 분리하는 이유들에 대해 알아보겠습니다. API의 추가 및 변경될 경우 RESTful API를 통해 서비스를 운영하고 있다고 가정합시다. 사이트 반응속도가 너무 느려 서비스를 Light House로 분석해보니 하나의 페이지에서 너무 많은 API를 호출해 문제가
최근 heroku의 모든 plan이 유료화 되면서 백엔드용 무료 서버가 거이 사라졌습니다. 프론트엔드를 위한 무료 웹 호스팅 서버는 netlify, github page, vercel등 점점 많아지고 있는데 백엔드는 점점 사라지고 있죠. AWS의 free tier를 사용해도 되지만 ec2에 s3, ssl, loadbalancer, rdb등을 추가하면 free tier 인데도비용이 꽤 나가는 것이 현실입니다. Serverless나 Egde Computing쪽에는 무료 서비스가 많이 생겼으나, 백엔드 개발을 이제 막 시작한 개발자의 프로젝트를 Serverless 구조로 바꾸기엔 너무 어려운 것이 현실입니다. 이러한 문제 때문에 Heroku를 대체할 만한 무료 WAS(Web Application Service)서버를 찾다보니 Qoddi라는 서비스가 눈에 들어와 실제로 배포해 보았습니다. Qoddi  로컬 개발환경에서는 h2 데이터베이스를 사용하고, 실제 배포환경에서는 postgres db를 사용하는 경우 ex) 보안 파일이나 암호를 모든 개발자에게 공개할 수 없는 경우 ex) 로컬 개발환경에서는 oauth2 토큰 없이 로그인, 실제 배포환경에서는 토큰을 포함해서 로그인을 할 경우 Profile이란 Spring 실행 환경을 Profile이라 한다. Profile에 따라 다른 설정과, 다른 Bean을 주입할 수 있다. properties 파일 분리하기 application-{개발환경}.properties를 만든다. application.propert
[그림: 카우치코딩 3기 카페메이트] (https://github.com/sungeun101/cafemate) 개발을 하다보면 위의 그림 처럼 여러가지 조건을 가지고 검색을 해야할 경우가 많이 있습니다. 조건이 고정되어 있다면 조금 쉽겠지만 사용자가 필요에 따라 조건을 추가하거나 뺄 수 있다면 슬슬 머리가 아픕니다. 요런식으로 if문을 통해서 구현을 조건 검색을 구현 할 수 있으나 이 경우 조건이 3개만 되도 6개의 if문을 써야하고 4개가 되면 무려 24개의 if문을 사용해야합니다. 조금 더 프로그래밍 센스가 있으신 분들은 JPQL과 Builder 패턴을 이용해서 SQL을 동적으로 생성할 수 있지만 SQL를 직접 작성 하는 것은
Spring Security는 Spring Application 개발시에 보안을 적용하기 위해 사용하는 보안 프레임워크 입니다. Spring Security는 웹 보안을 위하여 인증 및 보안 관련 로직을 제공합니다. 특히 Spring Security의 가장 중요한 기능 중 하나는 리소스별 권한 제어인데, Spring Security에서는 설정을 통해 리소스별 권한 제어, 리소스별 인증 로직 구현을 쉽게 구현할 수 있습니다. Spring Security 구조 Spring Security는 Filter 한 종류로 사용자의 요청이 Servlet Application에 도착하기 전에 사용자의 요청을 먼저 받아 사용자의 요청의 권한 및 보안 점검을 시행합니다. D Spring Seucity는 어떤 식으로 동작할까요? (아직 프레임워크에 대해 잘 모르시는 분들은 [이전 포스팅](https://velog.io/@couchcoding/%ED%94%84%EB%A0%88%EC%9E%84%EC%
우리는 웹 개발을 할 때, 앱 개발을 할 때, 인공지능 개발을 할 때, 게임 개발을 할 때, 어떤 개발을 하던 우리는 프레임워크를 사용해서 개발을 합니다. 그렇다면 프레임워크 먼가.. 느낌상 라이브러리 비슷한거 같긴 한데 정확히 무엇일까요?? 프레임워크(Framework)란? 프레임워크(Framework) 라는 단어는 Frame(틀) + work(일)이라는 단어의 합성어입니다. 일 구조, 혹은 작업 구조라는 뜻과 같이 프레임워크는 어떠한 일을 처리하기 위한 구조를 제공합니다. 프레임워크 위에서 개발을 하면 우리는 일을 하기위한 전체 구조와 동작방식을 만들지 않습니다. 프레임워크로 개발을 할 경우 전체 동작방식은 프레임워크가 제공하고 우리는 프레임워크의 일정 부분만 개발합니다. 예를 들어 웹 프레임워크의 경우 HTTP 요청이 오면 Path, Params, Header, Body로 파싱 및 디코딩을 수행하고 보안/인증 설정에 따라 보안/인증
안녕하세요 카우치코딩입니다. 이전 포스팅에 이어 구글 로그인응 이용하기 위하여 Java Backend(SpringBoot)를 통해 Resource Service를 구현하는 것을 배워보겠습니다. 예제는 자바로 진행하나 구조를 익히면 다른 백엔드 프레임워크에서도 사용할 수 있을 것입니다. 위 그림에서 6-9에 해당되는 로직입니다. 1. 프로젝트 셋업하기 Fireba
개발자가 되고싶어서 개발 공부를 시작하고 개발자가 되기위해 준비하다보면 개발을 빠르게 하는 것도 중요하지만 그 만큼 좋은 코드를 작성하는 것이 중요하다는 소리를 듭습니다. 실제로 회사에서는 코드의 생산성 만큼이나 중요시 여기는게 당신의 코드의 품질입니다. 그렇다면 좋은 코드란 무엇이고 어떻게 좋은 코드를 작성할 수 있을까요?? 일반적으로 좋은 코드란 가독성이 좋아 이해하기 쉽고, 변경하기 쉬우며, 재사용하기 쉽고, 효율적인 코드를 이야기합니다. 소프트웨어 개발은 단 한번에 개발에서 끝나는 것이 아니라 이후 수많은 변경 이 필요하기 때문에 기능 개발 만큼 중요한 것이 바로 유지보수 입니다. 따라서 코드 다시 읽었을때 이해하기 쉽고, 나중에 변경하기 쉬워야 합니다. 코딩