전체 글 174

우분투 22.04 업그레이드 오류

노트북 PC를 우분투 20.04에서 우분투 22.04로 업그레이드 하다가 오류가 났다. oh no! something has gone wrong a problem has occurred and the system can't recover. 이런 메시지가 나오면서 화면과 마우스가 먹지 않는 증상이다. 해결법 1. ctrl + alt + f3를 이용해서 CLI모드로 들어가서 로그인을 한다. 2. 다음 명령어를 입력한다. sudo apt-get update sudo apt-get dist-upgrade sudo dpkg --configure -a sudo apt-get clean sudo apt-get autoremove sudo reboot special thanks https://askubuntu.com/..

[도커] 12. dockerignore

우리는 git을 사용할 때 불필요한 파일의 add를 방지하기 위해 .gitignore파일로 관리한다. 도커도 같은방식으로 .dockerignore파일을 이용하여 관리할 수 있다. 사용방법을 한번 알아보자. 문제상황 dockerignore가 없을 경우 어떤 문제가 있는지 알아보자. # 폴더구조 ├── Dockerfile ├── log └── main.py # Dockerfile FROM python WORKDIR /app COPY . . CMD ["python3", "main.py"] # main.py import time while 1: pass # Do something main.py 는 어떤 작업을 수행하는 파이썬 파일이다. (ex. 웹서버, 모델 학습 ...) log파일은 컨테이너를 만들 때 불필요..

[도커] 11. 환경변수

도커에 들어있는 앱을 사용할때 데이터베이스 사용자 이름같은 환경변수를 주입해야 할 때가 있다. Dockerfile을 만들 때 편리한 방법으로 환경변수를 넣을 수 있다. 폴더 구성 ├── Dockerfile ├── app.py └── templates └── main.html 폴더 구조는 위와 같다. 간단한 플라스크를 이용해서 테스트해보고자 한다. # app.py from flask import Flask, render_template import os app = Flask(__name__) user = os.environ.get("USER_NAME") port = os.environ.get("PORT") @app.route("/") def main(): return render_template("main..

[도커] 10. 도커 네트워크

컨테이너에서 외부 api를 불러온다든지 다른 컨테이너의 api를사용하는 등 컨테이너에서 통신이 필요할 때가 있다. 실제로 컨테이너를 하나만 사용할 경우는 별로 없고 프론트 컨테이너, 백엔드 컨테이너, 데이터베이스 컨테이너를 한번에 사용하는 것처럼 여러개의 컨테이너가 통신해야 하는 경우가 많다. 이러한 통신을 하는 방법에 대해서 알아보자. 유스케이스 일단 컨테이너에서 통신을 하는 경우가 크게 아래와 같을 것이다. 여기서 호스트 컴퓨터는 도커를 실행하고 있는 컴퓨터이다. 5번과 6번은 실질적으로 컨테이너간의 통신이기 때문에 하나의 경우라고 봐도 된다. 물론 1부터 6까지 모든 연결이 가능하다. 이제 어떻게 통신하는지 알아보자. 위 통신을 위해 간단한 파일 두개를 한 폴더에 만들었다. # app.py from..

[스프링] 9. 쿼리메소드

지난 시간에 JPA를 이용하여 findById, findAll등의 메소드를 사용하여 데이터베이스에 접근할 수 있다는 것을 알았다. 그때는 간단하게만 살펴보았는데 복잡한 SQL문을 처리하고 싶을 수 있다. SQL문의 꽃이라고 볼 수 있는 select, from, where등을 사용할 수 있도록 하는 메소드가 쿼리메소드이다. // repository/UserRepository.java public interface UserRepository extends JpaRepository { List findByName(String name); } 위 메소드를 정의하고 테스트해보자. // test/repository/UserRepositoryTest.java @SpringBootTest class UserReposi..

[스프링] 8. JPA

JPA (Java Persistence API) 현재 자바에서 ORM기술 표준으로 알려져 있다. 스프링만을 위한 것은 아니고 자바 전반적으로 사용되는 듯 하다. 지난 시간 도메인 객체를 만들 때 Id, GeneratedValue, Entity 어노테이션이 그 예이다. 메소드명 의미 save 객체 하나를 삽입한다. saveAll 여러개의 객체를 동시에 삽입한다. findById 특정 Id를 가진 객체를 검색한다.(Optional로 반환) findAll 테이블에 존재하는 모든 객체를 검색한다. deleteById 해당하는 Id를 가진 객체를 삭제한다. deleteAll 모든 객체를 삭제한다.(위험) delete 해당 객체를 삭제한다. deleteAllInBatch 모든 객체를 삭제하는데 한번의 SQL만 호출..

[알고리즘] Codeforces Round #811 (Div. 3)

오랜만에 코드포스 컨테스트 글을 올려보려고 한다. rated대회는 무서워서 못치겠고 버추얼을 돌리면서 실력을 키우고 도전하려고 한다.(그리고 파란색이 너무 예뻐서 유지하고 싶다.) Codeforces Round #811 (Div. 3) A - Everyone Loves to Sleep [Solved!] 현재 시간이 주어지고 $n$개의 시간이 주어질 때 현재 시간 이후의 시간 중 가장 빠른 시간과의 차이를 구하는 문제이다. 시간을 분으로 고쳐서 정렬한 후 완전탐색 해서 구하면 된다. 다만 현재 시간이 주어진 시간보다 뒤일 수 있으므로 주어진 시간중 가장 빠른 시간에서 $24 \times 60 = 1440$을 더해 맨 뒤에 추가한 후 탐색한다. B - Remove Prefix [Solved!] 앞에서부터 몇..

[스프링] 7. Object Relational Mapping

지난시간에 DTO를 위해 Object Mapping이 자동적으로 적용된다는 사실을 알게 되었다. Object Mapping은 데이터 전송을 위한 객체를 json으로 변환해주는 작업이었는데 이번엔 데이터베이스에 자동으로 매핑해주는 Object Relational Mapping(ORM)을 알아보려고 한다. Object Mapping : Object $\leftrightarrow$ Json Object Relational Mapping(ORM) : Object $\leftrightarrow$ Relation(Table) ORM을 모르는 상태라면 데이터베이스를 조작하기 위해 SQL문법을 배우고 직접 사용하며 해당 언어와 데이터베이스를 연결하는 라이브러리를 알아야 한다. (실제로 내가 ORM을 몰라서 School..

[스프링] 6. 테스트코드 작성

지금까지는 코드 작성이 정상적으로 실행되는지를 서버를 켜고 API를 요청하는 방법으로 확인했다. 확실하긴 하지만 사람이 테스트한다는 점에서 귀찮음이 있다. 코드를 통해서 자동화하는 방법을 알아보고자 한다. // controller/ApiController.java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/") public String hello(){ return "Hello"; } } 간단한 코드를 하나 작성했다. 클래스 안에 커서를 두고 Ctrl + Shift + T를 누르면 테스트코드 작성 창이 나온다. 확인을 누르면 테스트 폴더에 같은 레벨의 폴더에 테스트 코드가 만들어진다. // test/c..