- [IT 정보] SSO - Single Sign-On조별하SSO - Single Sign-On Web 로그인 인증방식 중의 하나이며, 한 번의 로그인으로 다양한 어플리케이션을 재 로그인 없이 이용할 수 있는 통합인증을 의미한다. 이 로그인 인증방식은 이미 우리가 실생활에서 굉장히 많이 접하고 있는 로그인 방식이다. - SSO의 필요성 실생활에서의 예를 들어보자. 나는 카카오톡, 페이스북, 넷플릭스 세가지 어플리케이션을 주로 이용하고 있다. 이 세 개의 어플리케이션을 이용하기 위해선 각각의 계정이 필요하며 사용할 때 로그인을 요구한다. 각각의 사용자 정보를 저장하는 방식이 다르기 때문에 각각의 계정으로 해당하는 어플리케이션에만 로그인할 수 있다. 하지만 이렇게 독립된 어플리케이션이 아닌 하나의 회사에서 제공하는 서비스를 이용한다면 굳이 하나의 회사에서 사용자 정..
- 2023-12-01 11:10:47
- [Java] Serialization - serialVersionUID조별하Serialization - serialVersionUID JAVA에서 생성한 특정 객체를 파일로 저장하기 위해 코드를 작성하여 저장하고 읽어오는 로직을 구현했는데 컴파일할 때 아래와 같은 에러가 발생했다. 위의 에러가 발생한 이유를 찾다 보니 객체를 파일, 메모리, 데이터베이스로 저장하는 과정에는 직렬화(Serialization)가 필요하다고 한다. - 직렬화(Serialization)란 무엇인가? 그렇다면 직렬화(Serialization)는 무엇인가? 위에서 설명한 것과 같이 자바(JAVA)에서는 직렬화(Serialization)는 어떤 객체를 파일, 메모리, 데이터베이스 등으로 저장할 때 해당 객체를 바이트 배열로 변환시켜 저장시킨다고 한다. 이렇게 저장된 것을 다시 객체로 되돌리는 것을 역직렬화(..
- 2023-12-01 11:09:03
- [Tomcat] Unsupported major.minor version 51.0조별하에러로그 - 주요 에러 문구 org.apache.catalina.core.StandardWrapperValve invoke .... Insupported major.minor version 51.0 .... - 개발환경 JDK : jdk1.6.0_45 WAS : tomcat 7.0.82 발생원인 로컬에서 프로젝트 세팅 후 가동할 때 발생하는데 구글링을 하며 찾아보니 Java의 컴파일 버전과 실행 버전이 달라서 발생하는 에러라고 한다. 즉, 컴파일 버전보다 이하 버전에서 실행되었을 때 발생하는 에러이다. - 발생 CASE 1. Tomcat6에서 JDK 1.7로 컴파일된 프로젝트를 실행하는 경우 2. JDK 1.7로 컴파일하고 JDK 1.6 버전이 기본인 되는 PC에서 실행했을 경우 위의 2가지 이유 외 실..
- 2023-12-01 11:07:21
- [Django] django-crontab 스케줄러 작성조별하🍃 Crontab crontab은 Linux 운영체제에서 시간 기반 잡 스케줄러이다. 즉, 원하는 시간에 원하는 작업을 수행할 수 있게 해주는 작업 스케줄러라고 보면 된다. 예를 들어 장고에서 로그인을 했을 때, session으로 구현된 로그인이라면 django-session에 session정보가 저장되었다가 로그아웃하면 삭제가 된다. 하지만 브라우저가 닫히거나 만료시간이 지나게 되면 session정보는 유지되며 로그아웃 처리가 되기 때문에 계속되는 로그인 많아지면 불필요한 session 데이터가 쌓여 자리를 차지하게 된다. 이때 특정 시간이 되면 만료가 된 session정보를 삭제해 줬으면 좋겠다. 위의 기능을 대신 해주는 것이 바로 crontab!!이다. 🌱 django-crontab 설치 먼저 다음..
- 2023-05-22 19:17:06
- [Python] 파이썬 오버라이딩과 오버로딩조별하🍃 파이썬에서의 다형성 Java 언어의 다형성을 다루면서 오버라이딩과 오버로딩에 대해 알아보았다. 그렇다면 Python에서도 언어의 다형성이 있는지 살펴보려고 한다. Java 오버라이딩과 오버로딩 [Java] Java 다형성과 오버로딩, 오버라이딩 🍃 Java 다형성 ✔️ 다형성 이란 하나의 함수, 클래스가 다양한 방법으로 동작하는 것을 말한다. Java에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding) 을 통해서 다형성을 지원한다. 🌱 오 geminihoroscope.tistory.com 🌱 오버로딩(Overloading) ✔️ 파이썬에서는 오버로딩을 정식으로 지원하지 않는다고 한다. 하지만 구현은 가능하지만 오버로딩을 남발하면 코드가 복잡해진다. ✔️ 파이썬에서는 연산자 오..
- 2023-05-16 00:08:27
- [Java] Java 다형성과 오버로딩, 오버라이딩조별하🍃 Java 다형성 ✔️ 다형성 이란 하나의 함수, 클래스가 다양한 방법으로 동작하는 것을 말한다. Java에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding) 을 통해서 다형성을 지원한다. 🌱 오버로딩(Overloading) : 확장 ✔️ 함수가 여러 개의 동일한 이름을 가지며 매개변수의 유형과 개수 가 다르게 설정되어 사용하는 것을 의미한다. ✔️ 오버로딩은 함수 오버로딩 과 생성자 오버로딩 이 있으며 실제 적용되는 것은 같다. 같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 하는 방식이다.(일반적으로 하나의 클래스 안에 동일한 이름의 함수를 작성하게 되면 에러가 발생한다.) ➤ 오버로딩 예제 public cl..
- 2023-05-15 21:56:01
- [Java] 맥북에서 Java 환경세팅(VSCODE)조별하✔️ Windows에서 자바를 사용했던 입장에서, M1 맥북에서 Java를 사용하려고 하니 어떻게 환경세팅을 해야하는지 막막하길래 이번 기회에 설치하고 정리하려고 한다. 🍺 homebrew 설치 [macOS] M1 Mac 에 brew 설치하는 방법! 최근! 아이패드 가격사태를 보고 맥북프로 2017 이후 5년만에 쿠팡에서 M1 Max 맥북프로 16인치를 구매하였습니다. 새로 구매를 하였으니 개발환경을 세팅하기 위하여 가장 먼저! brew 를 설치해주었 somjang.tistory.com ✔️ homebrew가 기본적으로 설치되어 있는 프로그램이 아니기 때문에 사용하기 위해서 먼저 설치를 진행하자. brew update 시 Error 발생(Ventura 업데이트 이후) [macOS] brew update ..
- 2023-05-15 20:43:16
- [딥러닝] 딥러닝이란?조별하🍃 파이썬으로 구현하는 머신러닝 / 딥러닝 알아보기 ✔️ 이전에도 핫이슈가 되고 있는 인공지능 분야인 머신러닝 과 딥러닝 에 대핵서 공부해보려고 한다. ✔️ 머신러닝 과 딥러닝 을 구글 텐서플로우같은 라이브러리를 사용하면 쉽고 빠르게 개발할 수 있지만 이 머신러닝과 딥러닝은 내부 구조가 블랙박스로 제공되기 때문에 어떻게 동작되는지, 또는 코드로 어떻게 구현되는지 알 수 없다는 단점이 있다. ✔️ 그래서 유튜브 박성호님의 머신러닝 / 딥러닝 강의를 들으며 파이썬으로 어떻게 작동되며 코드로는 어떻게 구현이 되는지 알아보려고 한다. 머신러닝 강의 🌱 4차 산업 혁명 배경 ✔️ 학자에 따라 정의는 조금씩 다르지만, 대체로 4차 산업혁명 은 모든 것이 연결되어(Connectivity) 있는 환경에서 인공지능(Ar..
- 2023-05-08 23:05:59
- [Docker] docker-compose를 이용한 프로젝트 배포조별하✔️ EC2서버에서 일반적인 Django를 이용한 서버 배포 작업도 도움이 많이 되었다. ❗️ 요즘 추세로 DepOps에서 이용되는 MSA형태의 서버 배포 방식의 기본이 되는 Docker 배포 방식을 익히기 위해 docker-compose로 프로젝트를 배포해 보려고 한다. 🍃 EC2 1. 깃허브 repo 서버로 이동 ➤ 프로젝트 폴더 생성 $ mkdir workspace ✔️ 프로젝트 작업물이 들어가 폴더를 생성한다. ➤ Git repo 받기 $ git clone -b ✔️ 현재 main 레포지터리는 최신 상태가 아니기 때문에 develop 레포지터리를 clone 받도록 하자. 2. 서버에서 사용될 패키지 update 및 설치 ➤ 사용 가능한 패키지 및 버전 정보 업데이트 $ sudo apt update..
- 2023-05-08 19:32:25
- [ISSUE] Tag 포함된 Site 모델의 serialize 처리조별하[22.11.27] 🍃 구현하고자 하는 화면 1. 이전 개발 단계에서 사이트를 등록하여 해당 사이트에 Tag를 Many-to-Many관계로 등록하는 진행 2. 이제 태그가 등록된 사이트를 최신순으로 4~6개 조회 후 등록된 모든 태그를 조회하여 하단에 Tag button형태로 동적으로 뿌려주는 작업을 진행할 것이다. 3. 위와 같이 진행하기 위해서 Site항목을 조회할 뿐 아니라 Many-to-Many관계로 등록된 태그도 조회를 해야하기 때문에 Serializer 작업을 진행하게 되었다. 물론 api 2개를 요청하여 각각 사이트 데이터, 태그 데이터 조회할 수도 있지만 2번을 요청한다는 것 자체가 비효율적이며 drf에 존재하는 serialize를 활용하지 못한다고 판단 1. views.py > TagsA..
- 2023-05-06 17:34:18
- [ISSUE] ManytoMany 관계를 가진 두 모델 Bulk Create 작업조별하[22.11.26] 🍃 ManytoMany 관계를 가진 두 모델 Bulk Create 작업 ✔️ 현재 위와 같이 등록된 항목에 대해 태그를 추가하는 기능을 개발 구현 중이다. 등록된 항목은 Scrap Parsing을 통해 특정 사이트에 관련한 url, 썸네일, 제목 등을 저장하여 접근할 수 있게 구현한 현황 화면이다. 특정 사이트를 선택하여 bulk(다중)로 태그를 등록할 수 있게 스크립트 구현 선택한 각 Site와 Tag Model이 ManytoMany 관계로 데이터 모델링 1. 모델 코드 📌 Tag Model class Site(models.Model): """ 항목에 관한 데이터 모델 """ title = models.CharField(verbose_name='타이틀', max_length=100)..
- 2023-05-06 17:01:57
- [ISSUE]decorator를 이용한 중복작업 전처리조별하[22.11.26] 🍃 중복되며 각 함수의 사전에 처리되는 작업 decorator 📌 SiteBulkAPIView - 벌크 즐겨찾기, 삭제 class SiteBulkAPIView(APIView): """ 벌크 항목 즐겨찾기, 삭제 api """ def get_list(self): pk_ids: list = self.request.data.get('pk_ids') return get_list_or_404(Site, id__in=pk_ids) def validate_ids(self): pk_ids: list = self.request.data.get('pk_ids') for id in pk_ids: get_object_or_404(Site,id=id) return self.get_list() def put(..
- 2023-05-05 01:02:19
- [ISSUE] 2종 데이터 받아오는 api를 restful하게 변경 작업조별하[22.11.29] 2종류 데이터를 받아오는 api, restful하게 변경 작업 🍃 many-to-many serialize ✔️ many-to-many 관계가 존재하는 Model Site, Tag의 데이터를 하나의 api를 요청해서 동시에 받아오도록 serialize와 models, view쪽 작업을 진행했었다. serializers.py **class TagSerializer(ModelSerializer): name = serializers.CharField(max_length=20, allow_blank=False, trim_whitespace=True) class Meta: model = Tag fields = ['id', 'name']** class SiteSerializer(ModelSeri..
- 2023-05-05 00:53:44
- [ISSUE] signup AbstractBaseUser class조별하[22.11.24] Signup-AbstractBaseUser ✔️ Django에서 제공하고 있는 제공하는 auth-user를 사용하면 회원가입 시 기본적으로 secret key를 이용하여 password를 암호화, 로그인 시 session을 이용한 인증 인가를 손쉽게 이용할 수 있다. ✔️ 하지만 현재 진행하고 있는 프로젝트는 auth-user를 사용하지 않고 다른 user모델을 생성하여 사용자의 정보를 관리할 수 있게 따로 분리하였다. ✔️ Simple-JWT를 이용할 예정이라 session을 이용한 대한 인증 인가를 사용하지 않고, User에 필요한 사용자 정보를 custom 할 필요가 있기 때문에 제공해 주는 auth-user를 사용하지 않았다. 🍃 User 📌 User Model class Us..
- 2023-05-05 00:31:23
- [ISSUE] APIView로 bulk update 구현조별하[22.11.23] APIView bulk update 구현 ✔️ 사용자가 빈번하게 찾아가는 사이트를 북마크처럼 저장하여 저장한 항목들에 대해 즐겨찾기로 등록하여 분류하는 기능을 구현하고 있다. 🍃 구현 화면 ✔️ 위의 이미지와 같이 사용자가 등록한 항목을 선택할 수 있고, 선택한 항목들을 bulk(다중)처리가 가능한 기능이다. 상단 Toolbar에서 "벌크"버튼 선택으로 등록된 사이트를 선택이 가능하게 javascript로 동적 구현 항목을 선택할 때마다 코드에 선언되어 있는 전역변수 selected_articles에 해당 항목에 대한 식별자(id)값을 쌓아주며 벌크 이벤트를 작동하기 위한 선작업을 진행한다. 🍃 클라이언트 javascript function favoriteBulkSelectedSite..
- 2023-05-05 00:25:24
- [ISSUE] Asynchronous processing 비동기 처리 방식조별하✔️ 자바스크립트에서 fetch 함수를 이용해서 서버와 통신을 하게 클라이언트단을 개발하고 있다. 🍃 fetch() 함수 비동기처리로 인한 문제 발생 📌 문제의 코드 function deleteBulkSelectedSite(){ /* bulk 삭제 이벤트 */ if (selected_articles.length > 0){ if(confirm('선택한 항목을 삭제하시겠습니까?')){ let data = setFechData("DELETE", {pk_ids: selected_articles, user: 'User Id'}) fetch(`/api/sites/bulk`, data) .then(response => { let status = response.status if (status == 200) alert..
- 2023-05-05 00:16:58
- [ISSUE] gernerics view, DestroyAPIView 적용조별하[22.11.20] Try to apply generics DestroyAPIView Generics View를 사용하지 않는 이유 ✔️ DRF로 서버단을 rest_framework가 지원해주는 generics View를 사용하지 않고 APIView만을 이용하여 프로젝트를 진행하기로 결정하였다. ✔️ 그렇게 결정한 이유는 generics 한 View를 사용하면 코드가 간결해지고 개발하기 편리해지긴 하지만 팀 프로젝트를 진행하며 그렇게 간결해지고 작동되는 로직을 파악하지 않고 무분별하게 사용하는 것을 우려하여 처음에는 자유롭게 customizing이 가능한 APIView를 사용하기로 했다. APIView로 작성된 Bulk Delete ✔️ 항목을 다중으로 삭제하기 위한 기능 개발을 위해 클라이언트 단에서 ..
- 2023-05-05 00:09:44
- [Python] format(천단위 콤마 삽입하기)조별하✔️ 숫자가 천, 만 단위 이상으로 커지면 한 번에 몇자리 수인지 읽기가 어렵다. 123958674 ✔️ 숫자의 자릿 수를 읽어 천자리 마다 ","를 찍어주는 로직을 넣어 Python의 함수로 만들 수 있겠지만, Python에서는 format이라는 함수가 있기 때문에 이를 이용하여 천자리 마다 ","를 삽입하여 보자. price = 123958674 print(format(price, ',d')) print(format(price, ',f')) ✔️ format() 함수의 첫 번째 인자로 ","를 삽입할 값, 두 번째 인자로는 "d" 또는 "f"를 넣어준다. format(price, ',d'): 정수형으로 format(price, ',f'): 실수형으로 ➤ format() 천단위 삽입 print(form..
- 2023-05-04 16:57:26
- [Django] 다양한 템플릿 태그조별하게시판과 페이징을 구현하며 템플릿 태그를 사용하였다. ✔️ {% csrf_token %}: 서버와 api 통신에 필요한 크로스 사이트 요청 위조를 방지하기 위해 사용되는 태그 ✔️ {% if %}{% else %}: 조건을 이용하여 html에서 python 문법 사용 가능 ✔️ {% for item in items %}: for 루프를 이용하여 html에서 python 문법 사용 가능 🍃 순차적 출력 cycle ✔️ 게시판을 구현하면서 부트스트랩으로 디자인을 입히고, 짝수와 홀수 라인의 백그라운드 색상을 다르게 주었다. 아이디 유저이름 이메일 가입일 페이플랜 가격 {% for user in users %} {{ user.id }} {{ user.username }} {{ user.email }} {{ u..
- 2023-05-04 02:01:22
- [Django] django-seed를 이용한 데이터 만들기조별하장고 게시판을 구현하기 위해 django-seed를 이용하여 임의의 데이터를 만들어보았다. 하지만 무작위 데이터를 생성하기 때문에 이번에는 코드를 작성하여 내가 원하는 데이터를 생성해보려고 한다. ➤ 둘러보기 : Django 게시판 🍃 seed를 이용하여 데이터 생성하기 1. django-seed 설치 $ pip3 install django-seed $ pip3 install psycopg2 $ pip3 freeze > requirements.txt ✔️ 먼저 데이터를 생성할 수 있게 도와주는 seed를 설치하자. 📌 무작위 데이터 생성 방법 $ python3 manage.py seed shortener --number=30 ✔️ 코드 작성 없이 seed만 사용하여 app에 작성된 모델의 데이터를 무작위..
- 2023-05-03 20:17:35
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)