Skip to content

Instantly share code, notes, and snippets.

@jjangga0214
Last active June 18, 2021 01:06
Show Gist options
  • Save jjangga0214/efd6cd183c4310b17ab4a44958f0854b to your computer and use it in GitHub Desktop.
Save jjangga0214/efd6cd183c4310b17ab4a44958f0854b to your computer and use it in GitHub Desktop.

스프링 기반 백엔드 개발 기술 및 배포 소개

Spring Boot

스프링은 자바기반 엔터프라이즈 어플리케이션 개발에 쓰이는 프레임워크입니다. 개발 환경 세팅, 어플리케이션 설정, 개발 과정을 모두 마음대로 configure 할 수 있지만, 그만큼 복잡했습니다. 그래서 convention over configuration (설정보다 관례) 를 철학으로 내세운 스프링 부트가 등장했고, 간결하게 코드와 프로젝트를 구성하면서도, 원하는 부분을 유연하게 설정할 수 있게끔 했습니다. 또 MSA(Micro Service Architecture : 서비스를 비교적 작은 컴포넌트처럼 나누어 그들끼리 API 로 연계해 큰 서비스 덩어리를 만드는 아키텍쳐) 에도 더 유리합니다. 스프링 부트를 아는 것이 훨씬 유리하기 때문에, 강하게 권장드립니다.

배포

배포에는 크게 3가지 옵션이 있습니다.

호스팅 업체

Cafe24, 가비야 등이 유명합니다. root 권한이 없고, 시스템을 원하는 설정대로 구성하기에 한계점이 있고 불편합니다. 다만 간단한 서비스는 쉽게 올릴 수 있습니다.

클라우드

AWS (아마존), Azure (MS), GCP (Google), Heroku, Pivotal 등이 유명합니다. 이중 AWS가 시장 점유율 1위이고, 개발 문서도 가장 많습니다. 거의 완전한 컨트롤을 할 수 있고, 현업에서 회사들은 거의 모두 온프레미스를 제외하면 클라우드를 사용합니다.

예시 소개
  • 로드밸런서로 부하 분산# 스프링 기반 백엔드 개발 기술 및 배포 소개
  • 트래픽에 알맞게 서버 스케일링하기
  • 방화벽 설정
  • 데이터 베이스 전용 서버 분리
  • DNS 관리
  • CDN(CloudFront) 또는 S3으로 정적데이터 (권한 설정 포함) 전송

온프레미스

직섭 물리적인 서버를 소유하거나, 높은 값을 주고 빌리는 것(한번에 많은 자원을 빌림)입니다. 요즘은 온프레미스에서 클라우드로 옮겨가는 영향이 크고, 개인이 하기에는 비쌉니다. => 과외에서는 하지 않습니다.

웹 보안

client side security, server side security, network security 의 개념과, 실제 자주쓰이는 웹 해킹 방법인 XSS, CSRF, code injection, file upload/download vurnerablity, webshell, arp spoofing 등이 스프링에서는 어떻게 방어할 수 있는지를 배웁니다. 깊게 배우는 것은 선택이지만, 만약 기본적인 보안을 챙긴다면 근본적인 개념을 아는 것은 필요합니다.

Spring Security

백엔드 보안을 구성해주는 모듈입니다. 로그인부터 페이지, 리소스별 접근 유저 권한 부여 같은 개발시 필수적인 부분을 책임져줍니다.

Database 와 상호작용

JPA

Java ORM 의 공식 표준입니다. 객체지향과 관계지향이 서로 맞지 않기에(Object Relational Impedence Mismatch이라 불립니다) 그 둘 사이에 ORM (Object Relational Mapping) 레이어(여기서 JPAORM 입니다) 를 넣어 RDB 스키마를 추상화해서, 개발에 도움이 되도록 합니다.

Spring Data JPA

스프링에서 JPA를 쉽게 통합할 수 있도록 추상화하는 모듈입니다.

MySQL, MariaDB 등 Oracle 대체 RDBMS

기본적으로 SQL은 표준이라 거의 비슷합니다. 다만, Oracle과 데이터베이스, 유저 관리 방법 및 구성이 약간 달라서 간단히 알려드릴 수 있습니다.(완전 선택적)

NoSQL

RDB 이외의 database를 NoSQL 이라 합니다. 크게 document (mongoDB 등), key-value (redis 등), graph (Neo4J 등), column 형 4가지가 있습니다. (모두 NoSQL로 구성하지 않는다면) 기본적인 서비스는 RDB로 하시되, RDB 성격에 맞지않는 데이터를 NoSQL로 처리하는 방법(스프링에서 해당 데이터베이스에 맞는 프레임워크 사용 + 클라우드에서 데이터베이스 배포)을 알려드릴 수 있습니다.(RDB와 NoSQL 을 성격별로 동시에 둘다 연습해 볼 수 있어서 공부하기 좋다고 생각합니다.)

Gradle

Maven 을 대체하는 자바 의존성관리, 빌드 시스템입니다. 근본적으로 선언적인(declarative) 방법밖에 제공하지 않아 지적되던 Maven 의 단점 등을 개선했습니다. 안드로이드 표준이며, 구글이 지원하고, 향후 java 이외의 언어에서도 쓰이게 개발되어서, 익숙해지면 좋습니다.

Thymeleaf

JPA 를 대체하는 뷰 렌더링 엔진입니다. 스프링에서 공식으로 권장하고 있습니다. html 로 바로 볼수 도 있고, 서버에서 처리하는 것도 가능해, 웹 디자이너, 퍼블리셔 및 프론트엔드 개발자와 협업하기가 굉장히 편합니다.

Git, Github or BitBucket

git 은 버전관리 프로그램이고, github와 BitBucket은 git으로 관리하는 프로젝트를 다른 사람들과 협업하기 위한 사이트입니다. 개발자들은 대부분 기능과 커뮤니티 상에서 github를 선호하지만, private repository 가격때문에 BitBucket을 택하는 경우도 있습니다. 향후 개발하시면서 git을 쓰는 프로젝트를 경험할 확률이 큽니다. 때문에 사실상 항상 혼자 개발할 것이 아니라면 (설령 혼자 개발하더라도 git으로 하는 버전관리의 편리성 때문에 사용이 권장됩니다) git은 꼭 필요한 툴이 되었습니다.

Git 과 Svn 의 간단한 비교

https://www.slideshare.net/einsub/svn-git-17386752

Git을 다루는 방법

처음에는 개념 소개 후, GUI 클라이넌트 프로그램으로 다루는 방법을 알려드리고, 명령어(터미널에 쓰는 커맨드)로 다루는 방법을 소개해 드리는게 효율적이라 생각합니다(저도 처음 회사와 학교에서 개념 -> GUI -> 명령어 순으로 배웠던 것이 효과적이었다고 느꼈습니다).

참고

이 웹사이트는 github에서 만든 githubgist 라는 사이트로, github 자체와는 다릅니다. 제 github, githubgist 계정은 화면 좌측 상단에 보이듯이 jjangga0214이고, public 으로(오픈 소스) 공개한 코드들을 모두 보실수 있는 것처럼, github, githubgist는 코드를 공유하고 함께 개발하는 (예를 들어 이 글에 댓글도 다실 수 있습니다) 사이트입니다.

markdown

github를 이용하기 위해 사실상 markdown 이 필수인데요, 비교적 간단합니다!

RestAPI

요즘 많이 사용되는 Restful API 을 알아두시면 유용하게 (예를 들면 클라이언트를 위한 앱 개발시 스프링을 서버 백엔드로 개발할 때 등) 사용할 수 있습니다.

Java 8 에 대해..

java 8 부터 람다 표현식, Stream (IO Stream이 아닌, 자료구조를 다루기 위해 새로 추가된 Stream) 이 추가되서, 실제 개발시 활용하는 빈도가 높습니다(예를 들면 공식 레퍼런스에서도 자주 활용됩니다). 웹 개발과 직접 관련된 사항은 아니지만, 모르는 상태라면 배우는 것이 필요합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment