ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2024.10.27] 멋사 부트캠프 1일차, 2일차 일부 복습
    공부/TIL 2024. 10. 27. 20:41
    첫 부트 캠프 참여

     

    집에만 있으니 시간이 많아져서 신청해 본 클라우드 부트캠프 2기가 시작 되었어요.

    신청한 것은 10월 초였는데 국비 지원 교육 신청이 처음이라 조금 헤매다가 그만 신청을 하다 말아 버렸던 걸 캠프 첫날에 알아버렸어요.

    허둥지둥 신청 진행해서 오후에 간신히 참여하고 2일차까지 참여 후 그 내용을 복습했습니다.

     


    Web의 구조

    클라우드에 대해 배우기 이전에 클라우드는 웹에서 이용할 수 있는 서비스들을 보다 간편하게 만들 수 있는 또 하나의 서비스예요.

    web이 정보를 어떻게 주고 받고, 사이트는 어떻게 만들어서 운영할지에 대해 간략히 배워봤어요.

     

    web은 어떻게 정보를 주고 받을까?

    우리는 인터넷을 연결하고 웹브라우저를 실행해서 웹에 접속합니다. 그리고 웹에서 정보를 얻거나 공유하면서 웹을 이용하죠.

    이렇듯 웹은 정보를 제공하는 하는 쪽과 정보를 얻는 쪽으로 나뉘게 됩니다.

    • 정보를 얻는 쪽 : 클라이언트(Client)
    • 정보를 제공하는 쪽 : 서버(Server)

    클라이언트는 정보를 얻기 위해 서버에게 정보를 요청하는 쪽을 말하며 사람일 수도 있고 소프트웨어나 장치일 수도 있죠.

    서버는 웹에서 서비스를 제공하는 쪽으로 웹서버를 이용해서 사이트나 정보를 공유하는 공개 api등을 클라이언트에게 정보를 제공해요.

    주로 데이베이스나 war 등 빌드된 웹 애플리케이션이 실행되고 있는 웹 서버(컴퓨터)를 말해요.

     

    클라이언트가 정보를 얻기 위해 서버에게 요청하는 것Request라 해요.

    반대로 서버가 클라이언트로 부터 온 요청을 처리하고 정보를 보내주는 것Response라고 해요.

     

     

     

    웹 사이트는 어떻게 만들까?

    웹 사이트는 웹에서 동작할 프로그램, 즉 웹 애플리케이션을 사용자들이 링크를 통해 접속할 수 있게한 것이 웹 사이트에요.

    이러한 웹 사이트를 만든다면 우리는 서버 쪽으로서 클라이언트의 요청들을 처리할 수 있게끔 해야해요. 사용자가 요청을 보내기 쉽게 버튼, 검색 바, 메뉴와 같이 화면도 필요해요.

    그래서 웹 애플리케이션을 크게 두 부분으로 나누어 볼 수 있어요.

     

    프론트엔드Client사용자에게 보여질 화면을 제공해요.

    HTML, CSS, JavaScript와 프론트엔드 개발을 도와주는 프레임워크와 라이브러리로 우리가 볼 웹 사이트의 화면을 만들어요.

    백엔드 웹 사이트에서 사용하는 데이터나 필요한 기능을 제공해요.

    비즈니스 로직과 데이터베이스가 포함되며 웹사이트가 제공하는 것이 무엇이냐에 따라 더 다양한 기능을 포함할 수 있어요.

     

    프론트엔드와 백엔드를 각각의 서버로 운영한다면 프론트엔드를 제공하는 서버는 프론트엔드 서버, 백엔드를 제공하는 서버는 백엔드 서버라고 해요.

     

     

     

    웹은 어떤 구조일까?

    웹을 세분화해서 3 계층 구조(3 Tier Architecture)로 표현할 수도 있어요.

    • Data Layer : 데이터를 저장하고 관리하는 계층으로 DBMS가 해당되는 계층이예요.
    • Buissnes Logic Layer : 백엔드가 보통 이 계층을 의미하며 Data layer와 Presentaion layer로부터 온 정보를 처리해요.
    • Presentaion Layer : Client에게 보여지는 계층이며 프론트엔드가 이에 해당해요.

     

    웹 애플리케이션을 어떻게 구성할까?

    웹 애플리케이션의 기능들을  어떻게 구성할지 그 구조는 크게 2가지가 있어요.

     

    모놀리식(monolithic)

    웹 애플리케이션을 하나의 코드베이스로로 통합되어 있어서 다른 프로그램과 정보를 주고받기는 하지만 독립적으로 실행되어요.

    하나의 프로젝트만 개발하면 되어서 개발이 단순해지고 일관성을 유지하기 편해요. 또 하나의 프로젝트만 빌드하고 배포하면 되어서 빌드와 배포가 편한 것이 장점이에요.

    대신 애플리케이션의 모든 부분이 연결되어 있어서 작은 한 부분에 문제가 생겨도 다른 부분에도 영향이 가서 안정성이 저하될 수 있어요.

    하나에 모든 기능을 만들기 때문에 새로운 기능을 개발하기가 어려워요.

     

    마이크로서비스(microservices)

    분산 시스템이라고도 하며 모놀리식과 반대로 웹 애플리케이션을 여러 개로 나누어서 만드는 거에요.

    모놀리식에서 문제가 되었던 작은 부분의 문제가 전파되지 않아 안정성이 높고, 새로운 기능을 개발하기 편해서 확장성이 좋아요.

    대신 분리되어 있는 각각의 부분을 일일이 빌드 배포해야 해서 시스템의 관리와 배포가 복잡하고 각각의 부분들을 네트워크로 연결되어서 지연 발생할 수 있어요.

     

     

     

     

     

    웹사이트에 어떻게  접속할까?

    웹 애플이케이션을 만들었으니 이제 다른 사람들도 링크로 접속하게 할수 있을까요?

    그렇지 않아요. 우리는 아직 사용자들이 웹 앱에 접속할 수 있는 링크가 없기 때문이에요. 이 링크를 얻기 위해서는 서버 컴퓨터가 필요해요.

    서버 컴퓨터와 같은 하드웨어 자원을 인프라라고 하는데 이는 종류는 크게 2가지로 나뉘어요.

     

    온 프레미스(또는 온사이트)

    물리적인 서버 컴퓨터를 사내에 두어서 직접 관리하고 운영하는 것을 말해요. 즉 인프라를 직접 구성하고 관리하는 것이죠.

    직접 관리하기 때문에 서버의 보안을 통제하기 쉽고, 우리의 웹 앱에 맞는 환경을 조성하기 위해 미세하게 조정하기도 편해요.

    하지만 하드웨어를 구매하고 관리하는 데에 있어서 많은 비용이 필요하고, 서버의 자원이 부족해서 더 좋은 장비와 더 많은 컴퓨터가 필요할 때 이를 확장하는데에 어려움이 있죠.

     

    오프 프레미스

    온 프레미스와 반대로 물리적인 하드웨어를 직접 구비하는 것이 아니라 클라우드 플랫폼 등을 이용해 인프라를 구성하는 것을 말해요.

    내가 원하는 만큼의 하드웨어 자원을 지정해서 사용할 수 있기 때문에 확장이 관리하고 비용이 효율적이며 하드웨어를 클라우드 회사에서 관리해주어 유지 관리도 편해요.

    다만 클라우드 회사에서 제공해주는 것만 사용할 수 있기 때문에 내가 조정할 수 있는 부분이 제한적이고, 조작이 복잡해요. 특정 클라우드 서비스에 의존하게 되어서 클라우드사에 문제가 생기면 문제가 해결 될때까지 내가 할 수 있는 부분이 없어요.

     

    추가 참고자료
    웹 3계층 : https://velog.io/@yeavov/3%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B03-Tier-Architecture 
    웹 아키텍처. : https://learn.microsoft.com/ko-kr/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures 

     

     


     

    Java는 무엇일까?

    개발 환경 세팅하기

    1. jdk 설치 (17이상으로 설치했습니다)

    https://www.oracle.com/kr/java/technologies/downloads/

     

    Download the Latest Java LTS Free

    Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

    www.oracle.com

    저는 맥 사용중이라 brew로 설치했어요.

     

    2. java home 설정하기

    윈도우 : https://code-algo.tistory.com/28

     

    맥 - brew : https://llighter.github.io/install-java-on-mac/

     

    맥에서 Brew로 자바 설치하기(feat. 자바버전 바꾸기)

     

    llighter.github.io

    저는 나중에 여러 버전 바꿔가면서 사용할 수도 있어 위의 링크로 따라 했어요.

     

    3. IDE 설치하기

    https://www.eclipse.org/downloads/packages/ 

     

    Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source pro

    530 MB 123,303 DOWNLOADS Tools for developers working with Java and Web applications, including a Java IDE, tools for JavaScript, TypeScript, JavaServer Pages and Faces, Yaml, Markdown, Web Services, JPA and Data Tools, Maven and Gradle, Git, and more. Cli

    www.eclipse.org

    IDE는 이클립스로 진행했으며 가장 상단의 Eclipse IDE for Enterprise Java and Web Developers 로 설치했습니다.

     

     

    Java는 어떤 언어일까?

    • JDK(Java Development Kit) : java로 개발하고 실행할 때 필요한 컴파일러(javac), 런타임 환경(jre), 표준 라이브러리와 디버깅 도구 등 개발할 때 필요한 도구들의 모음이에요.
    • JRE(Java Runtime Environment) : java로 만든 프로그램을 실행하는 데 필요한 라이브러리들의 묶음이에요.
    • JVM(Java Virtual Machine) : Java로 작성한 프로그램을 실행하는 가상의 컴퓨터예요.

     

    1. 컴파일(compile)

    .java 확장자의 파일로 코드 작성 > javac 컴파일러로 기계어(byte code)로 번역 > .class 파일 생성

     

    2. Java Platform

    Java로 작성된 프로그램은 미리 작성된 클래스들의 집합인 Java API로 jvm의 기능을 사용해요. 때문에 java 프로그램이 실행 될 때 직접 하드웨어와 통신하지 않고 Java API와 JVM으로 구성된 Java Platform을 통해서 통신하게 되요.

     

    Java Platform의 상세한 구조는 아래 링크를 통해 더 알아볼 수 있어요.

    https://www.oracle.com/java/technologies/platform-glance.html 

     

    Java SE - Technologies | Oracle Technology Network | Oracle

    Java SE Overview There are two principal products in the Java SE platform family: Java SE Runtime Environment (JRE) and Java Development Kit (JDK). Java Runtime Environment (JRE) The Java Runtime Environment (JRE) provides the libraries, the Java Virtual M

    www.oracle.com

     

    3. JVM

    JVM 구조는 5가지 컴포넌트로 이루어져 있어요.

     

    - Class loader

    - Memory

    - Excution Engine

    - Native method Interface

    - Native method libraries

     

    Class loader

    컴파일 과정을 거쳐 생성된 .class 파일을 읽어서 메모리에 배치해요.  배치 과정은 로딩 > 링크 > 초기화로 진행 돼요.

     

    Memory

    메모리는 다시 5구역으로 나뉘게 되어요

    • Method : 클래스명, 객체명, static 변수가 저장 돼요.
    • Heap : 객체 정보를 저장해요.
    • stack : 메서드, 매개변수, 로컬 변수가 저장 돼요. 
    • PC Register : 현재 실행 중인 JVM의 주소를 가지고 있으며 상세 내역이 저장 돼요.
    • Native Method : C/C++과 같이 Java 외의 언어로 작성된 메서드를 실행 내용을 관리해요.

     

    Excution Engine

    실행 엔진은 3가지 기능으로 구성 되어 있어요.

    • Interpreter :  코드를 실행해요.
    • JIT(Just In Time compiler) : 성능 향상을 위한 컴파일을 해요.
    • GC(Garbage Collector) : Heap 메모리 내에 더 참조 되지 않는 객체를 제거해요.

    4. 객체 지향 언어

     객체란 우리 주변에 있는 모든 사물이나 개념과 같은 것을 속성과 종작으로 나눈 것을 말해요.

    • 속성(feild) : java에서의 변수
    • 동작(method) : java의 메서드

     

     

     

    Java 문법

    변수

    (접근제어자) 변수타입 변수명 (= 초기값);

    ()로 된 부분은 필요한 경우에만 사용합니다.

     

    종류

    기본형 변수

    하나의 값만 가지는 변수들이예요.

    • 정수형 : byte, short, int, long
    • 실수형 : float, double
    • 문자형 : char
    • 논리형 : boolean

    + 변수별 크기

    이 크기를 넘어서는 값을 넣고자 하면 에러가 발생해요.

    1 byte : byte, boolaen

    2 byte : short, char

    4 byte : int, float

    8 byte : long, double

    *1 byte = 8bit

     

    참조형 변수의 종류

    하나의 변수에 여러 값을 가지는 변수들로 주소값을 참조하기 때문에 참조형 변수라 불러요. 

    String, 배열, 클래스, 인터페이스 등 기본타입을 제외한 나머지가 참조형 변수예요.

     

    변수의 위치(scope)

    변수를 어느 위치에 선언하는지에 따라 변수를 사용할 수 있는 범위와 값이 달라지기 때문에 종류가 나뉘기 돼요.

     

    메소드/생성자 영역

    지역변수라고 하며 변수가 선언 된 메서드나 생성자가 종료되면 변수의 메모리도 같이 소멸돼요.

     

    클래스 영역

    메서드/생성자 영역보다 상위인 클래스에 포함되는 변수예요. 변수 선언 시 static을 앞에 붙이며, 프로그램 전체에서 공통으로 사용해요.

     

    인스턴스 영역

    객체에 포함되어 있는 각각의 인스턴스 영역에 포함되어 고유의 값을 가지는 변수예요. 반드시 고유한 인스턴스가 존재해야지만 사용할 수 있어요.

    연산자

    산술연산자

    • + : 덧셈
    • - :  뺄셈
    • * : 곱셈
    • / : 나눗셈
    • % : 나머지

    +증감연산자

    변수의 앞이나 뒤에 붙여서 사용하며, 사용한 위치에 따라 실행 순서가 달라져요.

    • ++ : 변수에서 1을 더해요. 
    • -- : 변수에서 1을 빼어요.

    대입연산자

    • += 좌측의 있는 수를 우측의 수로 더해요.
    • -= 좌측의 있는 수를 우측의 수로 빼요.
    • *= 좌측의 있는 수를 우측의 수로 곱해요.
    • /= 좌측의 있는 수를 우측의 수로 나눠요.
    • %= 좌측의 있는 수를 우측의 수로 나머지를 구해요.

     

    비교연산자

    • == : 같다
    • != : 다르다
    • < : 좌측보다 우측이 크다(초과)
    • <= : 좌측보다 우측이 같거나 크다(이상)
    • > : 좌측이 우측보다 작다(미만)
    • >= : 좌측이 우측보다 작거나 같다(이하)

    논리 연산자

    • && : 좌측과 우측(AND)
    • || : 좌측 또는 우측(OR)
    • ! : 부정(NOT)
Designed by Tistory.