본문 바로가기
Study/Backend Roadmap

[roadmap.sh] Backend 2주차 정리

by Nahwasa 2022. 11. 26.

스터디 메인 페이지

목차

    완벽한 정리가 목적이 아니고, 로드맵을 보면서 기본 개념을 알고 차후 파고들어서 공부하기 위한 사전 준비 과정인 스터디이다. 따라서 이하 정리한 내용이 부실할 수 있습니다(애초에 제대로 보려면 한 주제당 블로그 글 하나 이상씩 나와야 하는 수준..)

     


    Learn a Language

    프론트엔드는 HTML, CSS, JS 를 기반으로 +@로 파생되는 다른 애들이 있음. 백엔드는 그런건 잘 없는것 같음. 언어 및 프레임워크에 더해서 DB, 서버, 보안 등도 다뤄야 해서 러닝커브가 큰 것 같음.

     

    Java

    • 자바스크립트 - 스크립트
    • JVM 위에서 돌아감
      • JVM, JRE, JDK
    • 빌드툴 : Gradle, Maven
    • 웹용 프레임워크 : 스프링, 스프링부트, 플레이 등 - 하지만 스프링쪽이 너무 압도적임.
    • 테스트 관련 : JUnit, Mockito, JMeter 등

     

    C#

    • C++++
    • 자바와 비슷한 부분이 상당히 많아서 자바를 알고 있으면 배우기 쉬운편. 닷넷 3.0 이전까지는 약간 자바 따라하는 느낌으로 가서, 상당히 많은 자바 함수에 맨앞만 대문자로 바꾸면 자동완성에 뜨는걸 볼 수 있음. 심지어 일반적으로 Vector로 불리는 자료구조를 자바에서는 자바1에서 만들었다가 이후 Collection이 추가되면서 컬렉션에 포함되도록 동일한걸 ArrayList라는 이름으로 만들었는데, 그것마저 C#에도 있음. 다만 4.0이후부터는 자바보다 언어적인 기능면에서 앞서감(람다, 링큐 등등).
    • e.g. 백준 9093을 C#으로 푼 것. (자바와 상당히 비슷)
    using System;
    using System.IO;
    using System.Text;
    
    namespace Prac {
        class Program {
            private static StreamReader sr = new StreamReader(Console.OpenStandardInput());
            private static StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
    
            static void Main(String[] args) {
                int tc = int.Parse(sr.ReadLine());
                while (tc-->0) {
                    string[] tmp = sr.ReadLine().Split(" ");
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < tmp.Length; i++) {
                        sb.Append(reverseStr(tmp[i]));
                        sb.Append(i < tmp.Length-1 ? " " : "\n");
                    }
                    sw.Write(sb.ToString());
                }
                sr.Close();
                sw.Flush();
                sw.Close();
            }
    
            private static string reverseStr(string str) {
                char[] strArr = str.ToCharArray();
                char[] resArr = new char[str.Length];
                for (int i = 0; i < str.Length; i++)
                    resArr[i] = strArr[str.Length-i-1];
                return new string(resArr);
            }
        }
    }
    • 자바의 JVM 처럼 C#도 CLR이라는 가상 머신 위에서 실행됨.
    • .net framework : 주로 윈도우 응용프로그램(WinForm 등) 만들 때 쓰고, 웹도 만들 수 있는(ASP.NET) 프레임워크. 개발 환경도 제공하고 실행 환경도 제공함.
    • 닷넷은 C# 전용이 아니고, C++이나 VB, C++로도 사용 가능함.
    • 자바에서도 일반 프로그램 만들 땐 그냥 작성하고, 웹사이트 개발할 땐 Servlet, JSP등이 들어가는 것 처럼 닷넷 프레임워크를 통해 개발 시 웹을 개발하려면 ASP.NET을 사용하는 것임.
    • 예시 (닷넷을 쓴 C#에서 ASP.NET 작성한거)
    @{
        var rank = 50;
    }
    <html>
    <body>
    @if (rank < 60)
    {
        <p>Welcome to GeeksforGeeks!</p>
    }
    </body>
    </html>

    결과 : Welcome to GeeksforGeeks!

     

     

    Rust

    • Go랑 같이 비교되곤하는 시스템 프로그래밍 언어
    • C/C++와 동등한 수준의 속도를 달성하면서도 안정성, 동시성을 챙기는걸 목표로 하는 언어.
    • 러닝커브는 높은 편
    • 절차지향, 병렬형, 함수형, 객체지향 등을 지원하는 다중 패러다임 언어
    • 일단 엄청 빠름. Go도 빠른데 러스트가 더 빠름.
      • 0.1초안에 500만개의 입력을 받아 그 합을 출력해야 하는 백준 11921 문제를 통과한 몇 안되는 언어 중 하나. C, C++, Assembly(?), Rust (Go는 아직 백준에서 지원 안해서 모름. 통과될듯)
    • 다른 언어들은 GC가 있거나, C처럼 명시적으로 넣어주는데 러스트는 컴파일 시 코드가 알아서 메모리 관리 로직을 넣어줌.

     

    Go

    • 장점 : 구글꺼임, 단점 : 구글꺼임
    • 겹치는 단어도 많고 해서 주로 golang이라고 많이 부름.
    • 컴파일 언어지만 컴파일 속도가 매우 빨라 인터프리터처럼 쓸 수도 있음.
    • 문법적으로 c와 비슷한 면이 많음. (c 알면 배우기 더 쉬움)
    • GC, 타입추론 있음.
    • 에코 등의 웹 프레임워크도 있음.

     

     

    Ruby

    • 배우기 쉽다고 함.
    • 속도가 느린편. (대규모 서비스에서는 사용이 어렵다고 함)
    • 국내 사용률 매우 저조함.
    • Ruby on Rails : 루비용 웹 프레임워크.
    • 일본인이 만듬. 그래서인지 일본에서 많이 쓰임


    Version Control Systems

    파일의 변화를 추적하고 관리하는 시스템.

    GitHub

    • 대표적인 Git 저장소
    • GitLab, Bitbucket보다 비쌈.
    • 비공개 저장소가 무료로 2019년에 변경되긴 했지만 인원수 3인 이하.

    GitLab

    • Ruby on Rails로 만들어진 오픈소스 Git 저장소.
    • 인지도는 떨어지나, 비공개 저장소를 참여 인원 수에 관계없이 무제한으로 생성할 수 있어서 기업에서 사용하기 좋음.
    • 3way, rebase, ff, squash 등 merge 방식이 있음.

    Bitbucket

    • 둘보다 더 쌈.
    • 개인저장소는 5인 제한

     


    DB

    자바쪽의 압도적인 Oracle!

     

    SQL

    RDB에서 자료의 검색과 관리, 스키마 생성과 수정, 객체 접근 조정 관리 등을 위해 고안됨. RDB에 저장된 데이터를 효율적으로 가져오는 것이 목적. 주로 백엔드에서 작성하고 호출.

     

    GQL

    GraphQL, API 인터페이스를 위한 쿼리임. 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적. 주로 프론트엔드(클라이언트)에서 작성하고 호출.

     

    RDB

    관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스. 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용한 테이블 간 Join이 가능하다는게 가장 큰 특징

    • 오라클 : 성능 좋고 비쌈. 대용량 데이터 처리와 유지보수에서 장점이 있음. 다양한 DB 통계 정보 지원. ANSI/ISO SQL 뿐 아니라 오라클 SQL도 있음.
    • MS-SQL(SQL Server) : 마소에서 개발한 관계형 DB. MS의 다른 개발 언어와 호환성이 뛰어남. SQL Server 2017 이전까지는 윈도우만 지원하다가, 2017 부터는 리눅스도 지원. 하나의 쿼리에 여러개의 SELECT문을 사용해 여러개의 결과를 한번에 받는 기능도 있음. 가격이 쌈.
    • MySQL : 현재는 오라클이 인수한 상태임. 대부분의 운영체제와 호환되며 현재 가장 많이 사용되는 DB.
    • MariaDB : 오라클에 MySQL이 넘어가면서, 오픈 소스 진영에서 MySQL을 모태로 만든 DB.
    • PostgreSQL : 오픈소스 객체-관계형 DB (ORDBMS). MySQL에 비해 SQL 표준을 더 잘 지원하고, 비교적 쿼리가 복잡해질수록 MySQL보다 성능이 잘 나온다고 함. 다만 기본 CRUD 성능이 다른 DB보다 안좋은편. PostGIS라는 지리적 객체에 대한 지원을 추가하는 확장이 있음.

    NoSQL

    RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술. 테이블 간 관계를 정의하지 않음(따라서 JOIN 불가). 대량의 분산된 데이터를 저장하고 조회하는 데 특화 (페타급의 데이터도 저장 가능). 스키마가 유동적임. 칼럼이 각기 다른 데이터 타입이라도 가능.

    • Key-Value : 가장 단순한 형태의 NoSQL. 간단한 API(put, get, delete)만을 제공하므로 배우기 쉬운편. Value는 어떤 형태의 데이터라도 담을 수 있음(이미지나 비디오도 가능). Redis 등
    • Document : Key-Document 형태로 저장. 키-값 모델에서 좀 더 진화된 모델. Value가 계층적인 형태의 도큐먼트(객체)로 변경됨. 질의 결과는 json이나 xml 형태. 도큐먼트 내의 item을 이용한 쿼리가 가능하지만, SQL은 아니고 Xquery 등의 도큐먼트 질의 언어를 따로 익혀야함. MongoDB 등.

     

    NoSQL - Wide Column형 DB (컬럼형 DB)

    • RDB는 row 를 기준으로 데이터가 추가되고 처리됨. 스키마를 이미 정해놓고, row 단위로 insert 하게 됨.

    • 대부분의 관계형 DB는 부하를 분석하기 어렵고, 선형적 확장이 불가능해서 빅데이터를 처리하기엔 매우 비효율적. (크기가 커질수록 DB가 보틀넥이 되버림)
    • 컬럼형 DB는 컬럼형으로 데이터를 저장함 → 선형적 확장 가능

    • 컬럼 패밀리 : 컬럼 패밀리라 부르는 몇 개의 특정 컬럼을 기준으로 파티션키를 지정하고, 해당 파티션 키 아래에 데이터가 저장됨 (e.g. 카산드라)

    • 클라이언트가 데이터를 가져올 때는 파티션키를 사용.
    • 단점: 이미 생성된 테이블의 파티션키 수정 불가(테이블을 삭제할 수 밖에 없음), 파티션키가 아닌 데이터를 where 절로 필터링 하기 어려움(풀스캔 되버림).

     

    자바와 DB

    • JDBC : 이하 모든 자바 데이터베이스 접속의 기본 기술로, 자바에서 제공하는 API임. 이것만 가지고도 당연히 DB 다루는거 다 가능함.
    • ORM은 자바 객체를 데이터베이스 객체로 매핑해줘서 SQL을 자동생성해주는 방식. SQL Mapper는 SQL을 명시해줘야함.
    • SQL Mapper : MyBatis 등 (기존 아파치 iBatis에서 구글로 이전되면서 이름 및 기능 바뀜)
    • ORM : JPA(자바 ORM 기술에 대한 자바의 API 표준 명세), Hibernate(JPA의 구현체 중 하나.) 등

     

    ACID, 트랜잭션

    • DB 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질
    • 트랜잭션의 격리 수준 → 찾아보기
    • 트랜잭션 : 여러 개의 작업을 하나로 묶은 실행 단위
    • Atomicity (원자성)
      • 한 트랜잭션의 연산들이 모두 성공하거나, 반대로 전부 실패되는 성질
    • Consistency (일관성)
      • 트랜잭션 이전과 이후, db의 상태는 이전과 같이 유효해야 한다. 예를들어 ‘모든 고객은 반드시 이름을 가지고 있어야 한다.’ 라는 제약이 있는데, 이름 없는 새로운 고객을 추가한다면 일관성이 깨지게 됨.
    • Isolation (격리성, 고립성)
      • 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다.
    • Durability (지속성)
      • 한 트랜잭션이 성공적으로 수행되었다면, 해당 기록은 영구적이어야 한다. 예를들어 계좌이체 트랜잭션이 성공적으로 끝났다면, 그 뒤에 DB에 오류가 발생해 종료되더라도 계좌이체 내역은 기록은 남아야 한다.

     

     

    DB 정규화

    • 릴레이션 간의 잘못된 종속 관계로 인해 DB 이상현상이 일어나서를 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정.
    • 1NF, 2NF, 3NF, BCNF(3NF 강화), 4NF, 5NF. 다만 실무적으로 4NF, 5NF는 잘 하지 않음.
    • 1NF : 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것.
    • 2NF : 완전 함수 종속을 만족하도록 테이블을 분해
    • 3NF : 이행적 종속을 없애도록 테이블을 분해
    • BCNF : 모든 결장자가 후보키가 되도록 테이블을 분해

     

    Data Replication

    • 두 개 이상의 db를 Master/Slave로 나눠서 동일한 데이터를 저장하는 방식

     

    샤딩

    • 같은 테이블 스키마를 가진 데이터를 다수의 db에 분산해서 저장하는 방법

     


    References

    https://www.geeksforgeeks.org/difference-between-asp-and-asp-net/

     

    Difference between ASP and ASP.NET - GeeksforGeeks

    A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

    www.geeksforgeeks.org

    https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html

     

    [JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee's Development Blog

    Step by step goes a long way.

    gmlwjd9405.github.io

    https://www.jetbrains.com/ko-kr/lp/devecosystem-2021/

     

    The State of Developer Ecosystem in 2021 Infographic

    The State of Developer Ecosystem 2021 is a detailed report about the programming community, which covers the latest trends in languages, tools, technologies, and lifestyles of developers.

    www.jetbrains.com

    https://survey.stackoverflow.co/2022/#overview

     

    Stack Overflow Developer Survey 2022

    In May 2022 over 70,000 developers told us how they learn and level up, which tools they’re using, and what they want.

    survey.stackoverflow.co

    https://dingrr.com/blog/post/가장-사랑받는-언어-rust-왜-러스트-인가

     

    가장 사랑받는 언어, Rust - 왜 러스트 인가? | 블로그 | 딩그르르

    가장 사랑받는 언어, Rust - 왜 러스트 인가?

    dingrr.com

    https://programmers.co.kr/pages/2022-dev-survey

     

    2022 프로그래머스 개발자 설문조사

    5362명이 참여한 온라인 설문 조사 결과를 통해 우리나라 개발자들의 솔직한 의견을 확인하세요.

    programmers.co.kr

    https://www.itworld.co.kr/news/109976

     

    깃허브 대 비트버킷 대 깃랩: 개발자의 마음을 사기 위한 치열한 경쟁

    오늘날의 소프트웨어 개발은 너무 복잡해져서 만들어야 할 소프트웨어를 이해하고 제작하는 데 도움이 되는 소프트웨어를 만들어야 할 판이다. 코드가

    www.itworld.co.kr

    https://ko-kr.facebook.com/218158748272233/posts/2059812467440176/

     

    로그인 또는 가입하여 보기

    Facebook에서 게시물, 사진 등을 확인하세요.

    ko-kr.facebook.com

    https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

     

    JPA, Hibernate, 그리고 Spring Data JPA의 차이점

    개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

    suhwan.dev

    https://pythontoomuchinformation.tistory.com/528

     

    RDBMS와 NoSQL의 차이점 및 장단점

    들어가기 전에 DBMS DataBase Management System 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어. SQL Strucured Query Language 관계형 데이

    pythontoomuchinformation.tistory.com

    https://tech.kakao.com/2019/08/01/graphql-basic/

     

    GraphQL 개념잡기

    GraphQL은 페이스북에서 만든 쿼리 언어입니다. GrpahQL은 요즘 개발자들 사이에서 자주 입에 오르내리고 있으나, 2019년 7월 기준으로 얼리스테이지(early-stage)임은 분명합니다. 국내에서 GraphQL API를 O

    tech.kakao.com

    https://jh2021.tistory.com/12

     

    Spring Boot에서 GraphQL 활용법

    Spring Boot를 활용하여 RESTAPI를 다룰 수 있으며 REST가 무엇인지, 클라이언트와 서버가 통신하는 HTTP에 대해 학습한 지식이 있을 때 유용합니다. 이 글을 읽기 전 사전에 RESTAPI 그리고 HTTP메서드를

    jh2021.tistory.com

    https://code-lab1.tistory.com/53

     

    [DB] NoSQL이란?, NoSQL 특징, NoSQL 종류, NoSQL 장점

    NoSQL이란? NoSQL은 비관계형 데이터베이스를 지칭한다. 즉, 관계형 데이터 모델을 지양 하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며 스키마 없이 사용 가능하거나 느슨한 스

    code-lab1.tistory.com

    https://www.youtube.com/watch?v=birtUcZbfCY

    https://velog.io/@savernet/DB-DBMS별-차이

     

    [DB] DBMS별 특징과 차이

    각 DBMS별로 어떤 차이가 있는지 알아보도록 하겠습니다.

    velog.io

    https://hanamon.kr/데이터베이스-트랜잭션의-acid-성질/

     

    [데이터베이스] 트랜잭션의 ACID 성질 - 하나몬

    트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안

    hanamon.kr

    https://mangkyu.tistory.com/110

     

    [Database] 정규화(Normalization) 쉽게 이해하기

    지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

    mangkyu.tistory.com

    https://nesoy.github.io/articles/2018-02/Database-Replication

     

    Database의 리플리케이션(Replication)이란?

     

    nesoy.github.io

    https://nesoy.github.io/articles/2018-05/Database-Shard

     

    Database의 샤딩(Sharding)이란?

     

    nesoy.github.io

    https://sabarada.tistory.com/91

     

    어떤 DB를 사용해야 할까 ? CAP 이론

    안녕하세요. 현재 세상에는 수많은 데이터를 저장할 수 있는 서비스가 많이 나와있습니다. 그런데 이런 와중에 내가 만드는 시스템은 어떤 Database를 사용해야 좋을까요? 확장성은 어느정도로 가

    sabarada.tistory.com

     

     

     

    'Study > Backend Roadmap' 카테고리의 다른 글

    [roadmap.sh] Backend 4주차 정리  (0) 2022.12.10
    [roadmap.sh] Backend 3주차 정리  (0) 2022.12.03
    [roadmap.sh] Backend 1주차 정리  (0) 2022.11.19

    댓글