전체 글 (29) 썸네일형 리스트형 Unexpected token h in JSON at position 0 해결하기 본의 아니게 회사에서도 개발을 전혀 접하지 못하다보니 감을 많이 잃어가고 있는 듯 해서 뭐라도 하려다가 선택한 것이 클론코딩! 원래 끄적끄적 진행했던 노마드 코더의 Node.js(+Express)를 이용한 줌 클론 코딩을 진행 중 'Unexpected token h in JSON at position 0' 이라는 에러가 발생했다. 심지어 충돌나서 서버가 꺼져버림 무튼 냅다 구글에 "Unexpected token h in JSON at position 0"를 넣어 찾아보니 공백이나 따옴표(', ") 등을 잘보라고 하던데, 아무리 봐도 오타도 없고 따옴표 차이나 공백도 없잖아..? 그렇게 계속 소스를 들여다보던 와중에 position 0에 해당하는 'h'가 저 문구에서 기인한다는 것을 알고 해당 문구를 찾아.. SOLID, DRY, KISS AND YAGNI 여느 때와 다름없이 유튜브에서 유영하던 중에 DRY, KISS, YAGNI에 대한 영상을 보았다. 저 세가지 단어를 키워드로 검색하던 중 SOLID를 알게되어 아주 간략하게나마 정리해보려고 한다. SOLID 객체지향 프로그래밍 및 설계의 5원칙으로서 위키백과에서 찾아보면 다음과 같이 설명하고 있다. 두문자 약어 개념 S SRP 단일 책임 원칙(Single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. O OCP 개방-폐쇄의 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. L LSP 리스코프 치환 원칙(Liskov substitution principle) "프로그램의 객체는 프로그램의 정확성을 깨뜨리지.. Spring Security의 개념과 구조 1. 스프링 시큐리티란? 스프링 시큐리티는 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크이다. 만약 스프링시큐리티를 사용하지 않았다면, 자체적으로 세션을 체크하고 redirect 등을 해야할 것이다. 스프링 시큐리티는 보안과 관련해서 체계적으로 많은 옵션들로 이를 지원해준다. spring security는 filter 기반으로 동작하기 때문에 spring MVC 와 분리되어 관리 및 동작한다. 참고로 security 3.2부터는 XML로 설정하지 않고도 자바 bean 설정으로 간단하게 설정할 수 있도록 지원한다. 1-1 보안 관련 용어 접근 주체(Principal) : 보호된 대상에 접근하는 유저 인증(authenticate) : 현재 유저가 누구인지 확인(예: 로그인) - 애플리.. Python - StackOverflow Scrapper 만들기 지난 번 강의는 Indeed Scrapper 만들기였다면 이번에는 StackOverflow Scrapper 만들기 + CSV 파일 쓰고 저장하기이다. 이번 꺼도 Go 언어 때랑 큰 차이가 없기 때문에 코드만 붙여넣기! 그 동안 작성한 코드는 VS Code에 그대로 옮겨 커밋해두었다. import requests from bs4 import BeautifulSoup URL = f"https://stackoverflow.com/jobs?q=python" def get_last_page(): result = requests.get(URL) soup = BeautifulSoup(result.text, "html.parser") pages = soup.find("div", {"class":"s-pagination.. Python - Indeed Scrapper 만들기 이번에는 VS Code를 이용하여 코드를 작성하지 않고 replit.com에서 진행했다. (파이썬을 오늘 처음 접하는 나는, VS Code에 파이썬 환경을 설치해보려 했지만 많은 에러로 인해 결국 replit에서 진행하게 되었다..ㅠㅠ) Go 강의했던 크롤링 코드를 파이썬으로 다시 한 번 작성하는 거라 많은 주석을 써놓지는 않았지만, 웹에 작성해놓은 코드가 날아가는 불상사를 막기 위하여 현재까지 작성한 코드를 그냥 붙여넣어 보려한다. import requests from bs4 import BeautifulSoup LIMIT = 50 URL = f"https://www.indeed.com/jobs?q=python&limit={LIMIT}" def extract_indeed_pages(): result =.. JBoss vs Tomcat 자바 애플리케이션 서버의 3대 기업은 JBoss(현재는 이름이 변경되어 WildFly), Glassfish, Tomcat이 있다. 이는 모두 훌륭한 플랫폼이지만 서로 다른 강점을 가지고 있다. JBoss란? Red Hat Inc.의 자회사 인 JBoss에서 개발 한 JBoss는 IBM WebSphere 및 SAP NetWeaver와 같은 솔루션에 대한 오픈 소스 대안 역할을 한다. 주로 기능을 위해 Sun Microsystems의 Enterprise JavaBeans API에 의존하며, 개발자가 다른 작업 부분을 연결하기 위해 불필요한 프로그래밍과 코딩에 갇히지 않고 서버의 비즈니스 아키텍처에 집중할 수 있도록 설계되었다. 가볍고 클라우드 친화적인 JBoss는 엔터프라이즈에서 사용하기에 충분히 강력하며 .. Python - 함수 (Function) / 메소드(Method) Python에서는 함수를 만든다기보다 정의한다(define)고 하며 함수가 'def'로 시작한다. Java 외의 다른 언어와 같이 함수의 처음과 끝을 중괄호{}로 표기하지 않고, 들여쓰기나 공백으로 표시한다. # Java function main() { System.out.println("HELLO") } # Python def hello(): print("HELLO") print("BYE") """ 위와 같이 작성했을 경우 "HELLO"는 함수내에 있지만 "BYE"는 함수 밖에 있기 때문에 hello()를 호출했을 때 작동하지 않음 """ # Python 옳은 코드 def hello(): print("HELLO") print("BYE") 또 하나의 특이점은 함수에 인자를 넘길 때 타입을 명시하지 않는다.. Python - 변수 타입(Variable Type) 변수 타입을 지정해줘야하는 자바와 지정해주지 않아도 알아서(?) 판단하는 Go, Python까지.. 비슷비슷해보여도 다른 게 외국어보다는 사투리 같달까? 암튼 매우 흥미롭다. 기본적으로 Java나 Go언어와 동일한 부분은 따로 작성하지 않으려한다. 그럼 시작! Python 역시 변수명 앞에 타입을 표기하지는 않지만 Java와 다른 점이 있다면 True, False, None 등과 같은 값이 대문자로 시작한다는 것! 또한 암묵적으로 Java는 camelCase를 쓰는 반면 Python은 snake_case를 사용한다. // Java int a = 3; String abd = "abc"; boolean flag = false; // Python a_number = 3 a_boolean = False a_no.. 이전 1 2 3 4 다음