Before Start
앞으로 해당 카테고리에서는 C++ 공부한 내용을 정리하고자 한다.
사실, 파이썬을 보다 주로 사용하는 편이지만 (아무래도 딥러닝은 쪽은 Pytorch를 사용하니까...)
그래도 컴퓨터 전공자라면 객체지향 언어인 C++이나 Java는 한 번쯤 다뤄봐야하지 않겠는가?
TMI로 학부 때 학점 이수 빨리하고자 Java를 계절학기로 듣는 바람에 아직도 어색한 관계로,
딥러닝과 별개로 코딩 공부를 위하여 C++를 하기로 했다.
Why do we set the environment?
C++을 하기에 앞서, 환경 설정에 다뤄보겠다.
컴퓨터는 아래 사진 처럼 다양한 Operating system(운영체제)을 가진다.

개인 별로 사용하는 것이 다른 것은 큰 문제가 되지 않으나, 프로젝트 등을 진행하기 위해서는 이들을 같은 환경으로 맞춰주는 것이 필요하다.
그렇지 않으면 사소하지만 결과 값이 달라지거나, 아래 그림처럼 각종 버전 차이로 인한 문제를 맞닥트릴 수 있기 때문이다.

이러한 점을 해결할 수 있는 대표적인 2가지 방안이 Virtual Machine(가상환경)을 사용하거나 Docker를 사용하는 것이다.
가상 환경은 설정이 복잡하고, 크기가 커서 느린 문제를 가지고 있다.
이러한 문제를 Docker를 사용하면 극복 가능하다.

Docker
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
Docker는 리눅스 기반이다.
그리고 다양한 운영체제 사진에서 보다시피,윈도우는 유닉스 계열이 아니고 Mac은 유닉스 계열이다.
그래서 Mac은 유닉스 계열이기에 우분투를 설치할 필요가 없으나, 윈도우는 설치가 필요해진다.
Ubuntu for Window (WSL)
그렇다면 윈도우에서 우분투는 어떻게 설치할까?
윈도우에서 우분투 설치는 스토어에서 다운로드로 설치할 수도 있으나, 그것 보다는 직접 명령프롬프트에서 설치하는 것이 더 명확하다.
우선, 윈도우 설정에서 Windows 기능 켜기/끄기 를 찾는다.

찾으면 위와 같은 창이 나타날텐데, 여기서 Linux용 windows 하위 시스템 과 가상 머신 플랫폼을 찾아 체크표시를 한다.
이후, 명령 프롬프트를 관리자 권한으로 실행한다.
이후 기존 wsl을 우선 업데이트 해줘야한다.
WSL(Windows Subsystem for Linux) 으로 윈도우 안에서 리눅스를 그대로 실행할 수 있게 해주는 기능이다.
또한, 우분투는 매년 4월, 10월 마다 일반 버전을 출시하고 있기 때문에, 원하는 버전을 선택하여 설치를 진행하면 된다.
$ wsl --update
$ wsl --set-default-version 2
$ wsl --install -d Ubuntu-24.04
우분투 설치가 완료되면 계정 생성단계가 이뤄질텐데, 시키는대로 계정을 하나 생성해주면 된다.
계정까지 설치된 후, 명령 프롬프트를 재실행 시킨 후에 아래 명령어를 입력하면 우분투가 제대로 설치되었는지를 확인할 수 있다.
$ wsl –l -v

우분투 설치가 완료되면 이제 Docker Desktop을 설치하면 된다.
앞서 언급했던 Docker 공식 홈페이지에서 Desktop을 설치한 후에 다시 wsl -l -v 명령어를 실행하면, 아래처럼 Docker까지 잘 설치된 것을 확인 할 수 있다.

Setup Docker Container
자, 이제 설치는 완료되었다. 이제 Docker를 본격적으로 실행시켜보자!
Mac OS 유저 같은 경우에는 간단하게 바로 Docekr 공식 홈페이지에서 Desktop 설치만 완료된 상태면 된다.
이후 내용들은 윈도우와 Mac 모두 공통적으로 수행되어야한다.
다만, 윈도우같은 경우 명령 프롬프트에서 wsl 을 입력해서 들어온 상태에서 진행되어야 한다.
Docker는 다양한 환경을 image로 제공한다.
이 말은, 한 사용자가 본인 환경을 image로 만들어서 배포를하면 다른 사용자는 똑같은 환경을 가져와서 사용할 수 있다는 것이다.
하지만, 여러 환경이 있을테니 환경마다 공간을 만들어줘야하는데 이것이 Docker의 Container 개념이다.
그래서, 이제 image를 하나 가져와야한다.
image를 배포하는 곳은 Docker hub로 아래 사이트에서 검색으로 배포 중인 image 나아가, container까지 확인 가능하다.
Docker Hub Container Image Library | App Containerization
Software supply chain Secure Your Supply Chain with Docker Hardened Images Use Docker's enterprise-grade base images: secure, stable, and backed by SLAs for Ubuntu, Debian, Java, and more. Regularly scanned and maintained with CVE remediation and long-term
hub.docker.com
나 같은 경우에는, 직접 c++ 버전 11, g++ 컨파일러는 13.2.0 으로 직접 설치하여 사용하였다.
아래 공식 gcc 이미지를 활용하여도 된다.
gcc - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 15.2.0, 15.2, 15, latest, 15.2.0-trixie, 15.2-trixie, 15-trixie, trixie 14.3.0, 14.3, 14, 14.3.0-trixie, 14.3-trixie, 14-trixie 13.4.0, 13.4, 13, 13.4.0-bookworm, 13.4-bookworm, 13-bookwo
hub.docker.com
Docker의 image같은 경우 pull을 통해 다운로드를 우선 하는 것이 원칙이지만, Docker container를 만드는 run 명령어를 입력했을 때 image가 없다면 자동으로 pull이 이뤄진다.
## Docker image 다운로드 ##
$ docker pull {image_name}
## Docer image 다운로드 된 목록 확인 ##
$ docker images
## Docker container 생성 ##
$ docker run --name {container name} -it -v $({mount_folder_path}):/workspace {image_nmae}
위 코드를 실행 시키고나면 생성된 Container에 접속이 될 것이다.
Continaer에서 나갈 때는 [ctrl + p + q] 를 동시에 눌러서 나갈 수 있고, 재접속을 원할 때는 아래 코드로 수행하면 된다.
다만, 아까 언급했다시피 윈도우의 경우 wsl을 우선 접속하는 건 절대 잊으면 안된다!
$ docker exec –it {container name} /bin/bash
혹시, Docker를 재접속 할 때 오류가 뜬다면 대부분의 경우 노트북의 재부팅 되면서 Docker 자체가 꺼져있을 확률이 높다.
우선 아래 명령어를 실행시켜 만들어둔 Container가 작동되고 있는지 여부부터 확인해보면 된다.
$ docker ps
위 명령어 실행 후, 목록에 생성했던 Container가 보이지 않는다면 Docker Desktop에서 아래 그림처럼 실행 버튼을 눌러도 되고 직접 Container 이름을 입력한 후 Start 명령어로 프롬프트에서 실행시켜도 된다. ( $ start {Container_name} )

여기까지가 C++을 베우기 위한 환경설정이다.
물론, Docker를 사용하지 않고 Visual Studio Code를 활용하는 방법도 있다.
해당 방법은 추후 따로 글을 정리해서 업로드 하도록 하겠다.
일단 Docker를 사용한 환경설정까지는 끝이다!