반응형

 

1. 도메인 이름 입력 및 요청

 

사용자가 웹 브라우저의 주소창에 URL을 입력하고 엔터를 누르면, 브라우저는 입력받은 URL을 해석하여 해당 도메인의 IP 주소를 찾아야 합니다. URL이 도메인 이름으로 구성되어 있기 때문에, 먼저 이 도메인의 IP 주소를 알아내야 실제 서버와 통신이 가능합니다.

 

2. DNS 조회

 

브라우저는 도메인 이름을 IP 주소로 변환하기 위해 DNS(Domain Name System) 조회를 수행합니다. DNS는 전 세계의 도메인 이름과 그에 해당하는 IP 주소를 관리하는 시스템으로, 인터넷 전화번호부와 유사합니다.

 

브라우저는 먼저 로컬 DNS 캐시를 확인하여 최근에 조회된 도메인의 IP 주소가 저장되어 있는지 확인합니다.

캐시에 없는 경우, 브라우저는 설정된 DNS 서버에 요청을 보내 도메인 이름에 대한 IP 주소를 조회합니다.

이 과정에서 여러 DNS 서버를 거쳐 최종적으로 도메인을 관리하는 권한 있는(Authoritative) DNS 서버에서 응답을 받을 수 있습니다.

 

3. TCP 연결

 

IP 주소를 획득하면, 브라우저는 해당 서버에 접속하기 위해 TCP(Transmission Control Protocol) 연결을 시도합니다. TCP는 인터넷 프로토콜 스위트의 핵심 프로토콜로, 데이터가 정확하고 신뢰성 있게 전송되도록 합니다.

 

브라우저는 TCP 3-way handshake 과정을 통해 서버와의 연결을 확립합니다. 이는 SYN, SYN-ACK, ACK 패킷을 교환하는 과정으로 구성됩니다.

 

4. HTTP 요청 및 응답

 

TCP 연결이 확립되면, 브라우저는 HTTP(Hypertext Transfer Protocol) 요청을 서버로 보냅니다. 이 요청에는 사용자가 요구하는 리소스(예: 웹 페이지)의 정보가 포함되어 있습니다.

 

서버는 HTTP 요청을 받고 필요한 작업을 수행한 후 HTTP 응답을 브라우저로 전송합니다. 응답에는 요청된 웹 페이지의 데이터, 상태 코드, 헤더 등이 포함됩니다.

 

5. 콘텐츠 렌더링

 

브라우저는 서버로부터 받은 HTTP 응답을 해석하여 사용자에게 보여줄 웹 페이지를 구성합니다. 이 과정에는 HTML, CSS, JavaScript 등을 파싱하고 실행하여 최종적으로 사용자에게 웹 페이지를 렌더링하는 작업이 포함됩니다.

 

6. 완료

 

웹 페이지가 완전히 로드되면 사용자는 페이지의 모든 콘텐츠를 보고 상호작용할 수 있습니다. 이 단계에서 추가적인 사용자 요청이 있을 경우, 동일한 프로세스가 반복하여 수행됩니다.

반응형

'웹 기본지식' 카테고리의 다른 글

개발자 기술 로드맵  (0) 2024.06.01
public ip 와 private ip 는 어떤것인지  (0) 2024.05.31
http status 값 정의  (2) 2020.05.14
FTP 보안 프로토콜  (1) 2020.05.13
쿠키 세션 기본 개념  (0) 2020.05.13
반응형

스프링 프레임워크에서 객체 의존성을 관리하기 위해 주로 사용되는 세 가지 어노테이션인 @Autowired, @Resource, 그리고 @Inject에 대해 설명하고, 각각의 특징과 차이점을 비교해 드리겠습니다. 이 어노테이션들은 모두 의존성 주입(Dependency Injection, DI)을 수행하는 데 사용되며, 스프링 애플리케이션에서 중요한 역할을 합니다.

 


의존성 주입이란

의존성 주입(Dependency Injection, DI)은 소프트웨어 엔지니어링에서 사용되는 디자인 패턴 중 하나로, 객체가 자신의 의존성(즉, 다른 객체들)을 직접 생성하거나 검색하지 않고, 외부에서 받도록 하는 기술입니다. 이 패턴을 사용하면 컴포넌트 간의 결합도가 낮아지고, 유연성이 향상되며, 코드의 재사용성과 테스트 용이성이 증가합니다.

 

의존성 주입 어노테이션

1. @Autowired (Spring Framework)

 

라이브러리: Spring Framework

기능: 타입에 기반하여 자동으로 의존성을 주입합니다. 만약 타입이 일치하는 빈이 여러 개 있는 경우, 필드 이름이나 파라미터 이름으로 빈을 구별하여 주입합니다.

주입 방법: 필드, 세터, 생성자 주입이 가능하며, 생성자 주입이 권장됩니다.

특징: @Autowired는 스프링의 기본 설정에서 자동으로 사용될 수 있으며, required 속성을 통해 의존성이 필수적인지 선택적인지 지정할 수 있습니다.

 

2. @Resource (Java Standard)

 

라이브러리: JSR-250, Java Standard

기능: 주로 이름에 기반하여 의존성을 주입합니다. 이름을 명시하지 않으면 필드의 이름 또는 세터 메서드의 이름을 사용합니다. 이름으로 적합한 빈을 찾지 못하면 타입에 의해 주입을 시도합니다.

주입 방법: 필드 및 세터 메서드에 사용될 수 있습니다.

특징: @Resource는 Java EE에서 제공되며, 스프링과 같은 DI 컨테이너에서도 사용할 수 있습니다. 스프링에서는 @Autowired보다는 약간 더 명시적인 의존성 주입 방식을 제공합니다.

 

3. @Inject (Java Dependency Injection)

 

라이브러리: JSR-330, Java Dependency Injection standard

기능: 타입에 기반하여 의존성을 주입합니다. @Autowired와 유사하게 작동하지만, required 속성이 없습니다.

주입 방법: 필드, 세터, 생성자 주입이 가능하며, 역시 생성자 주입이 권장됩니다.

특징: @Inject는 Java의 표준 의존성 주입 규약을 따르며, 스프링 뿐만 아니라 다른 DI 프레임워크에서도 사용될 수 있습니다. 스프링에서는 @Autowired와 거의 동일하게 작동하지만, 스프링 특유의 기능인 required 속성을 지원하지 않습니다.

 

비교

 

유연성 및 호환성: @Inject@Resource는 Java 표준을 따르므로, 다른 Java 기반 프레임워크로의 이동성이 더 높습니다. 반면, @Autowired는 스프링에 종속적입니다.

기능성: @Autowiredrequired 속성을 통해 의존성이 필수인지 여부를 설정할 수 있어 더 많은 유연성을 제공합니다. @Inject는 이러한 속성이 없습니다.

사용의 용이성: @Autowired는 스프링 프레임워크에서 가장 일반적으로 사용되며, 스프링 특화 기능

 

 

위의 키워드 로 의존성 주입을 구현하는 방법

의존성 주입의 구현 방법

1. 생성자 주입: 객체를 생성할 때 생성자를 통해 의존성을 전달합니다. 이 방법이 가장 권장되는 방식으로, 객체의 불변성을 보장할 수 있습니다.

2. 세터 주입: 객체 생성 후 세터 메서드를 통해 의존성을 주입합니다. 생성자 주입에 비해 유연성은 높지만, 객체의 완전성을 보장받기 어려울 수 있습니다.

3. 필드 주입: 리플렉션을 사용하여 직접 필드에 의존성을 주입합니다. 코드는 간결해지지만, 다른 주입 방식에 비해 많은 단점을 가지고 있으며 권장되지 않습니다.

 

1. 생성자 주입(Constructor Injection)

 

생성자 주입은 가장 권장되는 방식입니다. 객체가 생성될 때 모든 의존성이 완전히 주입되기 때문에, 객체가 일관된 상태를 유지할 수 있습니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // UserService의 메서드
}

 

2. 세터 주입(Setter Injection)

 

세터 주입은 선택적 의존성이 필요할 때 유용할 수 있습니다. 이 방법을 사용하면 객체 생성 후 필요에 따라 의존성을 설정할 수 있습니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // UserService의 메서드
}

 

3. 필드 주입(Field Injection)

필드 주입은 코드는 간결하지만, 많은 단점을 가지고 있습니다. 특히, 테스트가 어렵고 순환 참조 문제가 발생할 수 있습니다. 따라서 권장되지 않는 방법입니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // UserService의 메서드
}

 

 

생성자 주입을 간단하게 해주는 어노테이션

@RequiredArgsConstructor는 Lombok 라이브러리의 주요 어노테이션 중 하나입니다. 이 어노테이션은 자바 클래스에 대해 필요한 생성자를 자동으로 생성해 주는 기능을 제공합니다. 사용하게 되면, 명시적으로 생성자를 작성하지 않아도 되므로 코드의 간결성을 유지할 수 있습니다.

 

@RequiredArgsConstructor의 작동 방식

 

@RequiredArgsConstructor 어노테이션이 적용된 클래스는 모든 final 필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자를 자동으로 생성합니다. 이 생성자는 해당 필드들을 초기화하는 역할을 하므로, 객체가 올바르게 구성되도록 보장합니다.

 

주요 특징

 

자동 생성자 생성: 클래스의 final 필드 또는 @NonNull이 붙은 필드에 대한 생성자를 자동으로 생성합니다.

코드의 간결성 증가: 생성자를 직접 작성하지 않아도 되므로, 코드를 더 간결하게 유지할 수 있습니다.

객체 불변성 지원: final 필드에 대한 생성자를 자동으로 생성하기 때문에 불변 객체를 만드는 데 유용합니다.

Null 안정성 강화: @NonNull 어노테이션이 붙은 필드는 생성자에서 null 검사 로직을 자동으로 추가하여, 객체 생성 시 null이 되지 않도록 강제합니다.

 

import lombok.NonNull;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
    private final String name;
    private final int age;
    @NonNull
    private String email;

    // Lombok이 자동으로 다음 생성자를 생성해줍니다.
    // public User(String name, int age, String email) {
    //     this.name = name;
    //     this.age = age;
    //     this.email = Objects.requireNonNull(email, "email is required");
    // }
}
반응형
반응형

SourceTree는 Atlassian에서 제공하는 무료 Git 클라이언트로, Git 저장소를 시각적으로 관리할 수 있도록 해줍니다. 사용하기 쉬운 인터페이스 덕분에 Git 명령어에 익숙하지 않은 사용자도 쉽게 접근할 수 있습니다. 여기에 SourceTree의 설치 방법과 기본 사용 방법을 설명하겠습니다.

 

SourceTree 설치하기

 

1. 다운로드 페이지 접속:

SourceTree의 공식 웹사이트(https://www.sourcetreeapp.com/)에 접속합니다.

2. 소프트웨어 다운로드:

홈페이지에서 Download for Windows 또는 Download for Mac 버튼을 클릭하여 운영 체제에 맞는 SourceTree 설치 파일을 다운로드합니다.

3. 설치 파일 실행:

다운로드한 설치 파일을 실행합니다. 설치 마법사가 안내하는 대로 설치 과정을 진행합니다.

4. Atlassian 계정으로 로그인:

SourceTree 사용을 위해 Atlassian 계정으로 로그인해야 합니다. 계정이 없다면, 화면의 지시에 따라 새로 계정을 생성할 수 있습니다.

5. 설정 완료:

로그인 후 추가 설정을 진행할 수 있습니다. 이 단계에서는 Git 설치 여부를 확인하고, 필요하다면 내장된 Git을 사용하도록 설정할 수 있습니다.

 

SourceTree 사용하기

 

1. 새 저장소 클론하기:

SourceTree의 메인 화면에서 Clone / New 버튼을 클릭합니다.

원격 저장소의 URL을 입력하고, 로컬 시스템에서의 저장 위치를 지정합니다.

Clone 버튼을 클릭하여 원격 저장소의 내용을 로컬 컴퓨터로 복제합니다.

 

2 로컬프로젝트를 git 저장소로 옮기기

- 로컬 저장소 추가하기

- 로컬에서 만든 소스 폴더를 선택

3 초기 파일들 github 에 push를 해 줍니다.

 

그전에 git 저장소를 생성합니다.

github 에 신규프로젝트를 생성합니다

github 에 프로젝트 생성했으면 
sourcetree 에 원격 설정을 해줍니다.

 

4. sourcetree 원격 설정 
설정 메뉴를 클릭해서 아래돠 같이 git 주소를 입력해줍니다. 

5. commit 및 push 

 

반응형

'Tool 사용 > 개발툴' 카테고리의 다른 글

[vscode] mac vscode 단축키(keymap)  (0) 2020.08.11
[vscode] 터미널에서 vscode 실행하기  (0) 2020.07.04
[vscode] 맥 vscode 단축키  (1) 2020.07.03
[Intellij] 맥 인텔리제이 단축키  (0) 2020.06.28
Bitbucket 사용하기  (0) 2020.06.04
반응형

 

웹사이트 접속:

JetBrains의 공식 웹사이트에 접속합니다. JetBrains 공식 웹사이트 링크를 클릭하거나 웹 브라우저에서 “IntelliJ IDEA download”로 검색하여 접근할 수 있습니다.

3. Community Edition 및 Ultimate 다운:

 두 버젼 차이 

Community Edition은 JVM 언어로 작업하는 개인 개발자나 학생들에게 적합한 반면, Ultimate Edition은 다양한 프로그래밍 언어와 웹 개발, 데이터베이스 관리, 서버 관리 등 복잡한 기업용 애플리케이션을 개발해야 하는 전문 개발자나 기업에 적합한 버전입니다. 이를 통해 개발 환경의 요구 사항과 예산에 맞는 적절한 버전을 선택할 수 있습니다.


2. 
운영 체제 선택:

 다운로드 페이지에서 사용 중인 운영 체제에 맞는 버전을 선택합니다. Windows, macOS, Linux 중에서 선택할 수 있습니다.

 

윈도우 

https://www.jetbrains.com/idea/download/?section=windows#section=windows

 

Download IntelliJ IDEA – The Leading Java and Kotlin IDE

Download the latest version of IntelliJ IDEA for Windows, macOS or Linux.

www.jetbrains.com

mac 

https://www.jetbrains.com/idea/download/?section=mac#section=mac

 

Download IntelliJ IDEA – The Leading Java and Kotlin IDE

Download the latest version of IntelliJ IDEA for Windows, macOS or Linux.

www.jetbrains.com

 

intelliJ IDEA에서 새 프로젝트 생성하기

 

1. IntelliJ IDEA 실행:

IntelliJ IDEA를 실행합니다. 이미 열린 프로젝트가 있다면, File 메뉴에서 Close Project를 선택하여 현재 프로젝트를 닫습니다.

2. 새 프로젝트 시작:

시작 화면에서 New Project를 선택하거나, File 메뉴에서 New -> Project...를 선택합니다.

3. 프로젝트 유형 선택:

왼쪽 패널에서 Java를 선택합니다. (IntelliJ IDEA Ultimate Edition을 사용하는 경우 다른 프로그래밍 언어나 프레임워크를 선택할 수 있습니다.)

프로젝트 SDK를 설정합니다. SDK가 설정되어 있지 않은 경우, Add SDK를 클릭하여 JDK를 설치하거나 기존에 설치된 JDK를 선택합니다.

 

5. 프로젝트 정보 입력:

Next 버튼을 클릭한 다음, 프로젝트의 이름과 저장 위치를 입력합니다.

Project name: 프로젝트의 이름을 입력합니다.

Project location: 프로젝트 파일을 저장할 위치를 지정합니다.

 

6. 프로젝트 생성 완료:

모든 설정을 마쳤다면 Finish 버튼을 클릭하여 새 프로젝트를 생성합니다.

IntelliJ IDEA가 새 프로젝트를 설정하고 초기화하는 과정을 진행합니다.

 

7. 프로젝트 구조 확인:

프로젝트가 생성된 후, 프로젝트 디렉토리 구조를 확인할 수 있습니다. 일반적으로 src 폴더가 생성되며, 여기에 소스 코드 파일을 추가할 수 있습니다.

 

이제 IntelliJ IDEA에서 새로운 프로젝트를 생성하고 기본 설정을 완료했습니다. 이 프로젝트를 기반으로 Java 코드를 작성하고 개발을 진행할 수 있습니다. 프로젝트 설정을 변경하거나 추가 구성이 필요한 경우, File 메뉴에서 Project Structure를 선택하여 다양한 프로젝트 설정을 조정할 수 있습니다.

 

우측 상단에 실행버튼으로 부트 로컬 실행

 

반응형
반응형

vue 프론트를 배포하려면 구글 플랫폼에서는 google cloud run 및 firebase hosting 을 통해 배포할 수 있습니다.  

cloud storage 에 정적 파일로 올릴 수 있지만 이 경우에 vue router 등 프론트에서 라우트 기능을 사용한다면 

경로 오류가 생길 수 있습니다. 

완전 static 하게 경로 이동 없는 경우에 cloud storage 이용하는게 좋습니다.

 

 

Firebase Hosting

  • 비용: Firebase Hosting은 정적 파일(HTML, CSS, JS 등)을 호스팅하기 위한 것이므로, 주로 네트워크 대역폭과 저장 공간에 대한 비용이 발생합니다. Firebase는 무료 티어를 제공하며, 이는 작은 프로젝트나 테스트 용도로 충분한 경우가 많습니다. 무료 티어를 초과하는 사용량에 대해서는 비용이 청구됩니다.
  • 무료 티어 제공: 예, 제공됩니다. 일정 수준의 사용량(예: 일정 GB의 저장 공간 및 월간 대역폭)은 무료입니다.
  • 적합한 사용 사례: 정적 웹 사이트 및 SPA(Single Page Application).

Cloud Run

  • 비용: Cloud Run은 사용한 컴퓨팅 자원(메모리와 CPU), 요청 수, 네트워크 대역폭에 따라 비용이 청구됩니다. Cloud Run도 무료 티어를 제공하며, 이에는 월간 요청 수, 컴퓨팅 자원 사용량에 대한 무료 할당량이 포함됩니다. 무료 사용량을 초과하면 비용이 발생하며, 이는 애플리케이션의 복잡도와 트래픽에 따라 달라집니다.
  • 무료 티어 제공: 예, 제공됩니다. 무료 티어는 일정량의 컴퓨팅 자원 사용과 요청 수에 대해 무료로 제공됩니다.
  • 적합한 사용 사례: 동적 웹 애플리케이션, API 백엔드, 마이크로서비스.

비교 및 선택

  • 정적 컨텐츠: 당신의 애플리케이션이 주로 정적 컨텐츠를 제공한다면, Firebase Hosting이 더 경제적일 수 있습니다. 이 서비스는 정적 파일을 효율적으로 서빙하기 위해 최적화되어 있습니다.
  • 동적 처리가 필요한 경우: 애플리케이션이 서버 사이드에서 동적 컨텐츠를 생성하거나, 사용자 인증, 데이터베이스 연동 등 복잡한 백엔드 로직을 필요로 한다면, Cloud Run이 더 적합할 수 있습니다. 이 경우 추가적인 비용이 발생할 수 있지만, 더 강력한 기능과 유연성을 제공합니다.

결국 선택은 애플리케이션의 요구 사항, 예상 트래픽, 그리고 예산에 달려 있습니다. 무료 티어로 시작하여 요구 사항이나 사용량이 증가함에 따라 서비스를 조정하는 것이 좋습니다.

 

정적 컨텐츠일 경우에는 Firebase Hosting 이 좋을 것 같아 

Firebase Hosting 하는 법 소개합니다. 

 

Firebase Hosting

https://console.firebase.google.com/u/1/ 

로 들어가서 프로젝트를 추가합니다.

프로젝트 추가 후 

Hosting 메뉴를 추가합니다.

여기에서 배포된 어플리케이션 확인 가능합니다.

 

하지만 따로 웹사이트에서 작업해줘야 할 것은 없고 로컬에서 firebase 설치해서 아래 가이드대로 설치해주시면 됩니다.

 

 

FIREBASE_TOKEN은 Firebase CLI를 사용해 생성할 수 있는 인증 토큰입니다. 이 토큰은 Firebase 프로젝트에 대한 비밀 액세스 권한을 제공하며, CI/CD 파이프라인(예: GitHub Actions)에서 Firebase 서비스에 자동으로 인증하기 위해 사용됩니다. 토큰을 생성하고 GitHub Secrets에 저장하는 방법은 다음과 같습니다:

Firebase 토큰 생성 방법

1. Firebase CLI 설치: Firebase CLI가 로컬 시스템에 설치되어 있지 않은 경우, 먼저 설치해야 합니다. 터미널에서 다음 명령어를 실행하여 설치할 수 있습니다:이 명령은 Firebase CLI를 글로벌로 설치합니다.

npm install -g firebase-tools

 

2. Firebase에 로그인: 다음 명령어를 사용해 Firebase에 로그인합니다:이 명령은 기본 웹 브라우저를 열고 Firebase 인증 프로세스를 시작합니다. 로그인 과정을 완료하세요.

firebase login

위 명령어 사용시 브라우져 창에서 firebase 계졍 인정하도록 화면이 뜨게 됩니다.

 

위 완료 메시지 뜨면 로그인 완료되었습니다.

 

3. CI용 Firebase 토큰 생성: Firebase CLI에서 CI(지속적 통합) 환경을 위한 인증 토큰을 생성하려면, 다음 명령어를 실행합니다:이 명령은 새로운 인증 토큰을 생성하고, 이 토큰을 터미널에 출력됩니다. 출력된 토큰을 복사하세요.

firebase login:ci

 

4. 프로젝트 폴더에 firebase.json 이 있어야 하는데, 아래 명령어 통해서 세팅하면 됩니다.

firebase init hosting

 

프로젝트가 없으면 새로 생성, 미리 firebase 에서 프로젝트 생성 하면 됩니다. 

있으면 프로젝트 선택하면 됩니다.

github workflow 에 넣냐는 말이 있는데, 여기에서 프로젝트 유저명/프로젝트명 을 넣어줍니다.

필요한 옵션을 알아서 선택해주자.

firebase.json

이 아래와 같이 생성되는데 혹시 잘못해서 안되면 나중에 덮어씌어도 됩니다.

여기까지 작성 후 

firebase deploy


를 하게 되면 프론트 소스가 배포 됩니다. 

 

 

선택해야 하는 옵션 이 너무 잘 되어 있어 

github actions 파일까지 생성해 줍니다.

옵션만 잘 따라가 주면 됩니다

 

옵션을 잘 못 선택해주었을 경우를 대비하여 firebase.json 및 firebase-hosting-merge.yml 공유합니다.
굳이 먼저 생성안해도 firebase init 통해서 actions 파일까지 생성해 줍니다.

npm ci 가 동작안할 수 있는데 

이때 steps 만 나눠서 실행 다시 해보세요.

 
반응형
반응형

Q.1 Java의 가장 중요한 특징은 무엇인가요?
플랫폼 독립성은 "한 번 작성하면 어디서든 실행 가능" (WORA) 개념을 통해 가능해지며, 이는 Java의 주요한 장점 중 하나입니다. Java 코드는 바이트코드로 번역되어 어떤 플랫폼에든 Java 가상 머신 (JVM)이 탑재되어 있다면 실행할 수 있습니다. 이로 인해 Java 애플리케이션은 변경 없이 다양한 운영 체제에서 작동할 수 있는 매우 이식성이 높으며, Java는 크로스 플랫폼 개발을 위한 인기 있는 선택지가 됩니다.

Java는 온라인 애플리케이션, 사무실 시스템, 모바일 개발 및 임베디드 기기 등 많은 분야에서 널리 사용되었고 성공적이었습니다. 이는 개발을 한 번만 하고 어디서든 배포할 수 있는 능력 때문입니다.

Q.2 플랫폼 독립성이란 무엇을 의미하나요?
이는 Java 코드를 한 플랫폼 (예: Windows)에서 컴파일하고 작성한 뒤 다른 지원 플랫폼 (예: Linux, Solaris 등)에서 실행할 수 있음을 의미합니다.

Q.3 JVM은 플랫폼 독립적인가요?
JVM은 플랫폼 독립적이지 않습니다. JVM은 플랫폼에 특화된 실행 환경으로, 판매자가 제공합니다.

Q.4 JVM이란 무엇인가요?
Java Runtime Environment (JRE) 또는 JVM 또는 Java 가상 머신으로 알려진 것은 Java 바이트코드를 다양한 시스템에서 실행할 수 있게 해주는 중요한 구성 요소입니다. 이는 Java 컴파일러가 생성한 바이트코드를 Java 바이트코드를 이해하고 실행할 수 있는 기계 코드로 변환하는 가상 머신입니다.

Java 애플리케이션은 플랫폼에 독립적이며, JVM의 추상화 레이어 덕분에 하드웨어 플랫폼이나 운영 체제의 변화에 영향을 받지 않고 작동할 수 있습니다. 메모리 관리, 가비지 수집 및 실행 환경 지원 등의 기능을 제공하기 때문에 Java 생태계의 중요한 구성 요소로 작용하며, "한 번 작성하면 어디서든 실행 가능" (WORA) Java 프로그래밍 모델을 지원합니다.

Q.5 JDK와 JVM의 차이점은 무엇인가요?
JDK는 개발 목적으로 사용되는 Java 개발 키트로, 실행 환경을 포함합니다. 그러나 JVM은 단순히 실행 환경으로, 자체 소스 파일을 JVM을 사용하여 컴파일할 수 없습니다.

Q.6 포인터란 무엇이며, Java는 포인터를 지원하나요?
포인터는 메모리 위치를 참조하는 핸들입니다. 포인터의 잘못된 처리로 인해 메모리 누수나 문제가 발생할 수 있으므로 Java는 포인터 사용을 지원하지 않습니다.

Q.7 모든 클래스의 기본 클래스는 무엇인가요?
java.lang.Object

Q.8 Java는 다중 상속을 지원하나요?
Java는 다중 상속을 지원하지 않습니다.

Q.9 Java는 순수 객체 지향 언어인가요?
Java는 기본 데이터 유형을 사용하므로 순수한 객체 지향 언어는 아닙니다.

Q.10 Java 배열은 기본 데이터 유형인가요?
Java에서 배열은 객체입니다.

경험이 있는 분들을 위한 Java 면접 질문
이 파트에서는 답변과 함께 레벨업된 Java 면접 질문을 다루겠습니다.

Q.11 main 메소드에서 public과 static의 순서가 중요한가요?
아니요, 순서는 중요하지 않지만 void는 항상 main() 앞에 와야 합니다.

Q.12 Java에서 지역 변수란 무엇인가요?
Java에서는 메소드, 생성자 또는 코드 블록 내에서 정의된 변수를 지역 변수라고 합니다. 이러한 변수는 정의된 블록 내에서만 사용되며 제한된 스코프를 가집니다. 일반적으로 메소드나 블록 내에서 특정 작업이나 계산에 필요한 일시적인 데이터를 지역 변수에 저장합니다. 메소드나 블록의 스코프를 벗어나면 지역 변수는 더 이상 사용할 수 없습니다.

지역 변수는 데이터의 캡슐화 수준을 제공하며, 사용하기 전에 명시적으로 초기화해야 하고, 함수나 블록의 연속적인 호출을 통해 값을 유지하지 않는다는 점에서 프로그램의 다른 부분과의 의도하지 않은 상호 작용을 방지합니다.

Q.13 Java 인스턴스 변수란 무엇인가요?
인스턴스 변수는 클래스 레벨에서 정의된 변수입니다. 인스턴스 변수는 자동적으로 기본 값으로 초기화되므로 별도로 초기화할 필요가 없습니다.

Q.14 Java에서 상수 변수를 어떻게 정의할 수 있나요?
변수를 static으로 선언하고 final로 지정해야 합니다. 이렇게 하면 클래스의 모든 인스턴스에 대해 하나의 변수 복사본만 존재하고 값도 변경할 수 없습니다.

Q.15 모든 Java 클래스에서 Main 메소드를 강제로 선언해야 하나요?
아니요, 필수적으로 선언할 필요는 없습니다. 소스 클래스가 Java 응용 프로그램인 경우에만 main 메소드를 정의해야 합니다.

Q.16 main 메소드의 반환 유형은 무엇인가요?
main 메소드는 아무것도 반환하지 않으므로 void로 선언할 수 있습니다.

Q.17 main 메소드가 Java에서 왜 static으로 선언되는가요?
Main 메소드는 클래스의 인스턴스화 이전에 JVM에 의해 호출되기 때문에 static으로 선언됩니다.

Q.18 main 메소드의 인수는 무엇인가요?
main 메소드의 인수는 String 객체의 배열로 전달됩니다.

Q.19 Java에서 main 메소드를 오버로딩할 수 있나요?
예, 클래스 내에서 서로 다른 메소드 시그니처를 가진 여러 main 메소드를 가질 수 있습니다.

Q.20 main 메소드를 final로 선언할 수 있나요?
예, main 메소드는 final로 선언할 수 있으며, 이 경우 상속받는 클래스는 자체 기본 main 메소드를 가질 수 없습니다.

Java 면접 질문
여기서는 새로 입사한 사람 및 경험이 있는 사람 모두에게 적용되는 몇 가지 Java 질문을 제공합니다.

Q.21 main 메소드에서 public과 static의 순서가 중요한가요?
아니요, 순서는 중요하지 않지만 void는 항상 main() 앞에 와야 합니다.

Q.22 소스 파일에는 하나 이상의 클래스 선언이 포함될 수 있나요?
예, 단일 소스 파일에 여러 클래스 선언을 포함시킬 수 있지만 public으로 선언된 클래스는 하나만 허용됩니다.

Q.23 패키지란 무엇인가요?
패키지는 관련된 클래스와 인터페이스의 모음입니다. 패키지 선언은 Java 클래스의 첫 번째 문장이어야 합니다.

Q.24 기본적으로 어떤 패키지를 가져올 수 있나요?
java.lang 패키지는 패키지 선언을 하지 않아도 기본적으로 가져올 수 있습니다.

Q.25 패키지 외부에서 private로 선언된 클래스에 어떻게 접근할 수 있나요?
불가능합니다.

반응형
반응형

gcp 에서 cloud sql 메뉴를 들어가게 되면 인스턴스 생성할 수 있다

 

 

데이터베이스를 선택하자

데이터베이스 버젼 설정

cloud sql 버젼 선택

리젼

asia-northeast3 (서울) 선택하시고

 

영역 가용성

서비스 중단 될 경우 다른 DB 를 올릴지 여부인데, 테스트일 경우 단일만 하자

머신구성

전용 코어랑 공유 코어 가 있는데

공유코아가 더 낮은 사양의 cpu 및 메모리를 사용할 수 있다.

 

저장용량

SSD 를 권장한다고 한다.

하지만 돈 아끼려면 HDD 

연결 

보안 측면적으로는 비공개 IP 로 생성해서 같은 vpc 망에서 db 접속 처리 해야한다.

비공개 IP 설정

 

 

데이터보호

자동백업 기능이 있는데, 개발이면 백업 필요없다.


유지보수

주지적으로 업데이트 되어 인스턴스 재시작 되는 항목이다. 앞서 영역가용성을 단일로 했으면 서비스가 중단 될 수 있을 것 같다.




예상가격 과금

돈 안나오는 구조로만 최소로 만들어보니 시간당 0.02 하루 0.37 달러가 나왔다.

돈 벌어서 스팩을 올리자

 

 

 

DB 인스턴스 생성

 

 

만들고 나서 외부에서 접속할 수 있게끔 승인된 네트워크를 추가해줘야 한다. 

전체로 0.0.0.0/0 으로 해도 되지만 특정 ip 로 할당하는게 그래도 보안에는 좋다. - ALL로 일단 만들고 나중에 ip 허용이든 비공개 ip 든 수정해라

 

완료 클릭 후 저장 버튼 통해 변경 사항 저장하자

 

외부툴에서 DB 접속(DBeaver 기준)

password : cloud sql 생성시 입력했던 암호

포트 : 3306 

드라이버 : mysql

host : 공개IP

 
반응형
반응형

google cloud 에 어플리케이션을 배포하려면 CI/CD 도구가 필요하다.

배포 도구로 github actions 를 통해 구글 클라우드에 어플리케이션을 배포하려면 IAM 이라는 서비스계정 인증절차가 필요한대 이에 대해 포스팅하려고 한다.

 

Github Action 

 최상위 폴더에서 ./github/workflows 폴더에 .yml 파일을 넣어주면 된다. 이 떄 파일명은 상관없다.

 

name: Google Cloud Auth

on:
  push:
    branches: [ "master" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    
    - name: Google Auth
      id: auth
      uses: 'google-github-actions/auth@v1'
      with:
        credentials_json: '${{ secrets.GCP_CREDENTIALS }}' 
        
    - name: set up cloud sdk
      uses: 'google-github-actions/setup-gcloud@v1'

    - name: "Use gcloud CLI"
      run: "gcloud info"

위 처럼 github action 파일을 작성해주고, 위의 secrets 텍스트를 GCP IAM 서비스에서 발급 받으면 된다.

 

 

구글 클라우드에 루트 계정이 있겠지만 다른 작업자 및 다른 서비스에서 구글 클라우드를 접근하게 하기 위해서는 IAM 서비스 사용을 해야한다.

github action 처럼 외부 서비스에서 구글클라우드에 접근하게 하려면 

서비스계정을 생성해야 한다.

 

서비스계정 생성

IAM 및 관리자 > 서비스 계정 

계정ID 만 임의로 만들면 끝이다

선택사항 기입할 필요없고 완료 버튼 누른면 완료

 

서비스 계정을 생성하게 되면 리스트에 키 없음이라고 뜨는데, 여기 키를 생성해주게 되면 된다.

해당 줄 맨 우측에 [키관리] 버튼 누르게 되면 키 페이지 로 이동된다.

 

새 키 만들기 

만들기 버튼을 하게되면 json 파일이 다운되는데, 여기서 이 파일의 json 전체를 복사해서

 

github 변수 등록

프로젝트의 settings > Secrets and variables 메뉴에서 Secrets 변수를 넣어주면 된다.

 

 

 

https://cloud.google.com/iam/docs/service-accounts-create?hl=ko

반응형

+ Recent posts