본문 바로가기

분류 전체보기54

Python 가상환경 생성, 활성화, 비활성화, 삭제 파이썬의 가상환경과 종류 파이썬에서 가상 환경이란 무엇일까? 프로젝트를 진행하다 보면 여러 모듈을 설치하게 된다. 이때, 각 모듈은 서로 의존성을 가지는 경우가 많아 글로벌하게 모듈을 설치하게 되면 여러 프로젝 mynameisleeminee.tistory.com 파이썬의 가상 환경에 대해 어느 정도 이해가 되었다면 venv, poetry에서 가상 환경을 생성, 활성화, 비활성화, 삭제하는 방법을 알아보자. 1. venv 💡 venv 는 python에서 기본적으로 제공해주는 라이브러리로 따로 설치할 필요가 없다. 가상환경 생성 가상환경 이름은. venv로 하는 것이 일반적이다. python -m venv 가상환경이름 가상환경 활성화 (MacOS) source 가상환경이름/bin/activate 가상환경 비.. 2022. 12. 7.
파이썬의 가상환경과 종류 파이썬에서 가상 환경이란 무엇일까? 프로젝트를 진행하다 보면 여러 모듈을 설치하게 된다. 이때, 각 모듈은 서로 의존성을 가지는 경우가 많아 글로벌하게 모듈을 설치하게 되면 여러 프로젝트를 관리하기가 어렵다. 만약, 프로젝트1 에서는 A, B, 프로젝트2 에서는 A, C 라는 모듈을 사용하는 상황이라 하자. 여기서 B는 A가 1.x 버전이고, C는 A가 2.x 버전이어야 사용이 가능하다면? 글로벌한 환경에 설치한 모듈은 이 두 프로젝트 모두를 관리할 수 없게 된다. 따라서, 각각의 프로젝트에 필요한 모듈을 별도의 로컬 환경에 설치하여 사용하는것을 가상 환경이라고 한다. "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다." 그럼 이제 가상 환경의 종류 중 pyenv, .. 2022. 12. 7.
Python 웹 프레임워크 (Django, Flask, FastAPI) 웹 애플리케이션을 개발할 때 사용되는 파이썬 프레임워크에는 Django, Flask, FastAPI 가 있다. 각 프레임워크 별 장점, 단점 및 활용 사례를 알아보자. Django 2003년에 개발된 Model-Template-View 패턴으로 웹 사이트 구축에 사용되는 무료 오픈 소스 프레임워크이다. Instagram, Youtube 등 Tech 대기업에서 사용되고 있으며 재사용 가능한 코드를 장려하기 때문에 인기가 있다. 장점 코드 구조가 매우 효율적이다. DRF(Django Rest framework)의 모듈러형 아키텍처와 커스터마이즈 가능한 아키텍처로 인해 Django를 사용하여 웹 API를 구축하기 쉽다. 공동 SQL 주입 및 사이트 간 요청 위조 공격에 대한 방어 기능을 제공함으로써 보안을 강.. 2022. 12. 6.
CORS (Cross-Origin Resource Sharing) CORS 란? 서버와 웹브라우저가 통신하는 로직에서 가끔 이 CORS 어쩌구라는 에러가 뜬다! 하지만 CORS 는 에러가 아니라는 사실..! CORS 는 해결방법을 제시해준 것이다. 자세히 알아보자! 옛날에 서버와 브라우저는 같은 도메인을 사용하였다. 하지만 시대는 달라졌다. 서버에서 전부 처리하던 일을 API 도하고 웹도 하게되면서 다른 브라우저(도메인)에서 다른 브라우저(도메인)으로 요청을 주고받는 시대가 왔다. 하지만 옛날에는 도메인 하나에서 모든 요청을 주고 받았기에 다른 도메인에서 요청이 오면 보안상 굉장히 위험하다 판단하여 막아두었다! 이때 정책이 SOP (Same-Origin Policy) 라는 정책인데, 동일한 출처, 동일한 URL 로만 요청을 해라 라는 정책이다! 하지만 이제는 이 도메인.. 2022. 7. 26.
@ModelAttribute의 역할! @ModelAttribute 는 크게 두가지 역할을 한다. 이 예시로 이해를 해보자. /** * @ModelAttribute("item") Item item * model.addAttribute("item", item); 자동 추가 */ @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item) { itemRepository.save(item); //model.addAttribute("item", item); //자동 추가, 생략 가능 return "basic/item"; } @ModelAttribute - 요청 파라미터 처리 @ModelAttribute 가 Item 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법.. 2022. 7. 3.
빈 스코프와 종류 빈 스코프란? 간단히 말해서 빈이 존재할 수 있는 (유지될 수 있는) 범위이다. 스프링이 지원하는 스코프는 다음과 같다. 1. 싱글톤 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 항상 같은 인스턴스의 스프링 빈을 반환한다. 아래의 예제로 이해해보자. public class SingletonTest { @Test public void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); .. 2022. 7. 3.
트랜잭션은 무엇이며 트랜잭션을 시작하기 위한 준비! 트랜잭션 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것이다. 예를 들어, 1,2 둘다 함꼐 성공해야 결제가 완료되는데, 중간에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있는것이다. 트랜잭션에서는 커밋과 롤백을 빼놓을 수 없는데 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(Commit) 이라 하고, 작업중 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback) 이라 한다. 💡 트랜잭션을 사용하기 위한 준비단계!! 기본적으로 자동커밋 모드가 설정되어 있다. 하지만 자동 커밋 모드에서는 트랜잭션을 수행할 수 없어서 아래 명령어로 수동 커밋 모드로 바꾸어주어야 트랜잭션을 시작한다고 표현할 수 있다. set autocommit false; 💡 애플리.. 2022. 7. 3.
Item57. 지역변수의 범위를 최소화하라. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 오늘은 그럼 지역변수의 범위를 줄이는 방법에 대해 알아보자. 1. 처음 쓰일 때 선언하기 미리 선언해두면 변수를 실제로 사용하는 시점에 타입과 초깃값이 기억이 나지 않을 수 있다. 지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지 이므로, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤까지 살아 있게 된다. 2. 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미루기. ✅ 예외 : try-catch 변수를 초기화 하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화하기. (그렇지 않으면 예외가 블록을 넘어 메서드.. 2022. 7. 3.
Item61. 박싱된 기본 타입보다는 기본 타입을 사용하라. 자바의 데이터 타입은 int, double, boolean 같은 기본타입과 이에 대응하는 Integer, Double, Boolean 같은 박싱된 기본 타입이 있다. 기본타입과 박싱된 기본타입에는 크게 세가지의 차이가 있다. 기본타입과 박싱된 기본타입의 차이 1. 박싱된 기본 타입은 값 뿐만아니라 식별성 이라는 속성도 갖는다. 2. 박싱된 기본 타입은 유효하지 않은 값, 즉 null을 가질 수 있다. 3. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 더 효율적이다. 이 세가지 차이 때문에 주의하지 않고 사용하면 문제가 발생할 수 있다. Integer 값을 오름차순으로 정렬하는 예시를 보자. (첫 번째 원소가 두 번째 원소보다 작으면 음수, 같으면 0, 크면 양수를 반환한다.) Compara.. 2022. 7. 3.
Item47. 반환 타입으로는 스트림보다 컬랙션이 낫다. 원소 시퀀스, 일련의 원소를 반환하는 메서드는 많다. 그 중 stream 을 사용해 원소를 반환할 수 있다는 얘기가 있겠지만, stream 은 반복(iteration)을 지원하지 않는다! 그래서 stream 과 반복을 알맞게 조합해야 좋은 코드가 나온다. 그런데❗❗ stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함하며, Iterable 인터페이스가 정의한 방식대로 동작한다!! 그럼에도 for-each 로 stream 을 반복할 수 없는 이유는 Stream 이 Iterable을 확장하지 않아서이다..! 자바 타입 추론의 한계로 컴파일되지 않는 예시 for (ProcessHandle ph : ProcessHandle.allProcesses() :: iterator) { ^.. 2022. 6. 29.