🙋수정 전 코드

// 요청 구성
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
    .bucket(bucketName)
    .key(filePath)
    .build();

 

AWS S3에 파일 업로드 하기 전 요청을 구성하는 코드이다.

구성 후 S3에 업로드 된 파일의 경로, 즉 URL을 응답하는식으로 업로드 API를 작성하고 URL에 접근했는데

내가 원하는 건 URL에 접속했을 때 브라우저에 바로 이미지가 보여지는 것이었지만

해당 URL은 이미지 다운로드만 되었다.

 

🙋 수정 후 코드 (Content-Type 설정 추가)

// 요청 구성
    PutObjectRequest putObjectRequest = PutObjectRequest.builder()
        .bucket(bucketName)
        .key(filePath)
        .contentType(file.getContentType()) // 업로드 시 파일의 Content-Type 설정 *  파일을 이미지로 인식 -> 다운로드 대신 웹 페이지에 표시
        .build();

 

💡 이전에 코드가 다운로드 됐던 이유 :

파일이 어떤 종류인지 인식하지 못하기때문에 다운로드할 파일로 처리됐던 것이다.

따라서 Content-Type 설정을 통해 파일의 형식이 명확히 설정되어 브라우저가 해당 URL에 접근할 때 다운로드 하지않고

바로 화면에 표시할 수 있게 된다.

 

 

🙋 도커 컨테이너 실행 시 에러 발생할 때? (포트 충돌인 경우)

 

✅ 1. 재시작

 

간혹 Docker 자체의 문제로 인해 포트가 해제되지 않는 경우가 있다.

이럴 땐 도커를 재시작 해보면 된다.

 

docker restart [docker_서비스_이름]

 

  2. 현재 포트 점유 확인

 

특정 포트번호를 사용하는 프로그램이나 다른 컨테이너가 있는지 확인해야 한다.

아래 명령어를 통해 확인 가능하다.

 

netstat -ano | findstr : 포트번호

 

출력된 결과에서 PID (프로세스 ID)를 확인한 후,

해당 PID를 사용하고 있는 프로그램을 종료하거나, 다른 포트를 사용할 수 있도록 설정을 시도해본다.

🙋  Enter Password: 비밀번호를 잊어버렸을 때?

docker exec -it [컨테이너 이름] bash
mysql -u root -p
Enter Password:

 

✏️ 아래 명령어를 실행해보자. PASSWORD를 바로 확인할 수 있다.

docker exec [컨테이너 이름] printenv | findstr MYSQL_ROOT_PASSWORD

 

💡 참고 - 도커 설치부터 MySQL 실행까지

 

MySQL Docker 컨테이너 접속 (Docker을 활용한 개발 환경 구성)

✏️ Docker란? (참고:https://greenring.tistory.com/46) ✏️ Docker을 활용하여 MySQL에 접속하는 이유 : 새로운 환경마다 MySQL을 설치 안해줘도됨. MySQL 이미지를 내려받아 컨테이너를 구성하면 효율적. ✏️

greenring.tistory.com

 

🙋 MySQL 8.2 Command Line Client 프로그램 클릭 시 창이 켜졌다가 바로 꺼지는 현상 해결하는 방법

1. MySQL 8.2 Command Line Client 프로그램 '속성' 창 열기

 

2. 바로가기 탭에서 '대상(T)' 부분을 수정한다.

 

수정 전 : "C:\Program Files\MySQL\MySQL Server 8.2\bin\mysql.exe" "--defaults-file=C:\Program Files\MySQL\MySQL Server 8.2\my.ini" "-uroot" "-p"

 

수정 후 : "C:\Program Files\MySQL\MySQL Server 8.2\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.2\my.ini" "-uroot" "-p"

 

✏️수정하는 이유 : 아래 캡쳐에 나와있는 것처럼 my.ini 파일은 ProgramData에 있다.

경로가 옳지않아 프로그램이 시작하지 못했던 것 같다.

 

 

✏️ 유즈 케이스란 ?

시스템을 설계하거나 서비스를 설계할 때 전체적인 사용자의 이용 패턴을 분석해 놓은 것

 

✏️ 대표적 도구

lucid chart, draw io(=https://app.diagrams.net/)

 

✏️ draw io (GitHub과 연동하여 사용가능하다.)

✏️ draw io 통해 그린 유즈케이스 예시

 

구성요소 : 시스템(System), 액터(Actor), 유스케이스(Usecase), 관계(Relation)

연관관계 : 실선

포함관계 : 점선 (include, extend로 구분)

 

* include : 로그인 하는 경우 인증이 필요하다. 이런 경우 회원 로그인할 때 인증 유즈케이스가 필요하다고 보고 포함시켜서 실행하기때문에 include로 나타낸다.
extend : 로그인 실패하는 경우 다시 로그인 하는 케이스로 가야하는데 이렇게 특정 조건일 때 실행 되는 유즈 케이스 부분을 확장 관계로 보고 extend로 나타낸다.

<구성요소 예시>
시스템 : DB
* 액터 : 이용자
* 유스케이스 : 회원가입
* 관계 : 실선,점선(포함,연관 관계)

 

✏️ Docker란? (참고:https://greenring.tistory.com/46)

✏️ Docker을 활용하여 MySQL에 접속하는 이유 :

새로운 환경마다 MySQL을 설치 안해줘도됨. MySQL 이미지를 내려받아 컨테이너를 구성하면 효율적.

✏️ 도커 설치

https://www.docker.com/products/docker-desktop/

 

Download Docker Desktop | Docker

Docker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!

www.docker.com

명령어 통해 도커 설치 확인 : cmd > docker -v

아래와 같이 확인 가능하다면 설치 정상적으로 완료.

✏️MySQL 도커 이미지 다운로드

https://hub.docker.com/ > MySQL 검색 > MySQL 클릭 >

아래 그림 부분에서 우측 클릭하여 복사 > cmd > docker pull mysql:latest (*최신버전 다운위해 latest적음)

🙋 위 부분에서 에러발생 시 할 것.

1. 도커가 실행중인지 확인

2. Windows PowerShell(관리자실행) > wsl --update 

 

✏️ MySQL 도커 컨테이너 생성 및 실행

cmd > docker run --name <컨테이너이름> -e MYSQL_ROOT_PASSWORD=<패스워드> -d -p 3306:3306 mysql:latest

<컨테이너이름> : 컨테이너 이름 지정하기

<패스워드> : 패스워드 지정하기

 

✏️ MySQL 도커 컨테이너 접속

docker exec -it <도커 컨테이너 이름> bash

 

✏️MySQL 접속

mysql -u root -p

* 패스워드가 입력이 안되는 현상? : cmd창에 보이지 않을뿐 입력은 되는 중. 글자 안떠도 패스워드 입력하고 엔터 누르면 됨

✏️ 가상화 기술 등장 이전

하나의 서버에 하나의 애플리케이션만 구동 가능. (하나의 서버에 하나의 OS, 프로그램 운영)

안정적이라는 장점이 있었지만, 남는 서버 공간이 방치됐음(비효율적)

 

✏️ 하이퍼바이저 기반의 가상화(OS 가상화)

남는 서버 방치되는 비효율적 운영 극복위해 하이퍼바이저 가상화 기술 등장.

논리적으로 분할된 공간에서 독립된 가상환경(VM)을 만들고, 호스트시스템에서 VM에 깔린 다수의 게스트 OS를 구동화할 수 있음.

서버의 자원을 효율적으로 사용할 수 있지만, VM을 띄우고 자원을 할당해 게스트OS를 부팅해서 구동해야하므로 시간 및 리소스 소모가 큼

 

✏️ 컨테이너 기반의 가상화(도커 : 가장 유명한 오픈소스)

컨테이너는 VM과 유사하지만 고유의 OS 필요없음

모든 컨테이너는 호스트의 OS 공유함(CPU, RAM등 막대한 양의 시스템 리소스 확보 가능)

애플리케이션 구동을 위한 패키지(이미지)만 있으면 구동 가능

*Docker compose(도커 컴포즈) : 다중 컨테이너를 관리할 수 있음. yaml파일에 명령어를 적어서 컨테이너를 정의하고 관리.

도커의 설정값들을 yaml파일에 저장해서 간단한 명령어로 실행되게 해줌.

 

🙋 단일 OS 에서 여러 애플리케이션 실행컨테이너 기반의 가상화 기술이 더 적합하고,

서로 다른 OS 환경에서 실행해야하는 경우에는 VM이 적합하다.

💻 웹서버(Web Server) 

정적 컨텐츠(html, css, js)를 제공하는 서버. (ex. Apache, Nginx)

HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에 요청을 하면 그 요청을 받아 정적 컨텐츠로 제공함.

동적 컨텐츠를 요청받으면 WAS에게 요청 넘겨줌, WAS에서 처리한 결과 클라이언트에 전달

💻 WAS(Web Application Server)

동적 컨텐츠를 제공하는 서버. (ex. Tomcat(=Apache Tomcat, JBoss, WebSphere)

DB조회 또는 비즈니스 로직을 처리하는 동적 컨텐츠 구동이 가능한 서버.

WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 서블릿 컨테이너, 웹 컨테이너로 불린다.

WAS는 Web Server와 Web Container 역할 모두 가능.

🙋 그렇다면 WAS가 웹서버 기능까지 수행하는데, 분리해서 연동하는 이유는?

  • 처리 속도 : WAS는 독립적인 웹서버보다 처리속도 느림 > 서비스 품질저하 될 수 있음
  • 서버 부하 방지 : 분리해서 서버의 부하를 방지함. 정적 컨텐츠까지 WAS가 한다면 부하가 커지고, 수행속도 느려질 것.
  • 보안 강화 :  SSL(Secure Sockets Layer - 보안 소켓 계층 : 웹 사이트와 브라우저 사이 혹은 두 서버 사이에 전송되는 데이터를 암호화하여 인터넷 연결 보호하기위한 표준 기술)에 대한 암호화, 복호화 처리에 웹서버 사용 가능
  • 여러 WAS 연결 가능 : 로드밸런싱(여러 서버들로 대규모의 네트워크 트래픽을 분산 처리하는 기술/로드=부하,밸런싱=분산, 즉 네트워크나 서버에 가해지는 부하를 분산해주는 기술)을 위해 웹서버 사용할 수 있음. 여러 개의 서버를 사용하는 대용량 웹어플리케이션의 경우 웹 서버와 WAS를 분리하여 무중단 운영을 위한 장애 극복(작동 중지된 WAS가 있다면 대신해 다른 WAS를 사용하여 장애를 극복함)에 쉽게 대응할 수 있음

 

 

+ Recent posts