내가 밥벌어먹고 사는 프로그래밍 언어인 '자바'에 대한 내용들을 정리하기 위해 만든 이 블로그.

한동안 잠들어 있었는데, 이제 다시 이 녀석을 활성화하기로 한다.

4~5개월 동안 진행하는 SLiPP 스터디와 관련한 내용은 이 카테고리 내에 기록하겠다.

관련한 내용도...

안드로이드 개발을 하려고 하면 알아야 하는 게 참 많다. 그래서 그것들을 정리하자니 어렵다.

쉽지 않은 일이라는 사실을 이해해줬으면 한다.

이렇게 정리한 내용을 조금 살을 덕지덕지 발라가면서 글을 늘려가볼까 한다. 오늘 대충 생각한 것이라 구조가 딱히 마음에 드는 것은 아니다. 안쓰던 글을 쓰려니 머리가 복잡하다. 하아.


1. 자바


  1. 참고사이트
    • 자바의 정석 (http://cafe.naver.com/javachobostudy)[http://cafe.naver.com/javachobostudy]
  2. 자바를 배워야 하는 이유 : 자바는 생각보다 배우기 어렵다. 객체지향에 대한 이해…는 나중에 천천히 익혀도 되고(중요한 부분이다), 객체가 가지는 데이터와 기능(Function, method라고 불림)에 대한 이해가 선행되지 않으면 이게 어느나라 소리인가 하게 되는 그런 이야기를 하게 된다. 강력한 타입체크(기본형, 참조형)형 언어이고 어떻게 개발하느냐에 따라 성능차이도 상당히 많이 난다. 기본적으로 진행되어야 할 것은 인터페이스와 클래스의 구분, 상속을 통한 확장(extends)와 구현(implements) 에 대한 이해를 해야한다. 
  3. 자바 설치 및 경로설정

3. IDE 및 ADT


  1. 참고사이트
  2. 이클립스 사용법을 배워야 하는 이유 :
    • 노트패드로 개발할는 있다. 그러나 참조하는 소스를 전체적으로 변경하는 작업을 하기는 너무 어렵다.
    • 도구를 잘 사용하면 편하다.
    • 이클립스와 ADT 조합이 안드로이드 개발에는 최적이다.
    • 무료(공짜)다.

3. 안드로이드


  1. 참고사이트나 서적
    • 안드로이드 사이트 (http://developer.android.com/index.html)[http://developer.android.com/index.html]
      • 제일 많이 찾아오게될 사이트, 영어로 되어 있지만, 여기만한 곳이 없다는 생각이 든다.
    • 커니의 안드로이드 (http://androidhuman.tistory.com/)[http://androidhuman.tistory.com/]
    • 안드로이드펍 (http://www.androidpub.com/)[http://www.androidpub.com/]
  2. 안드로이드를 배워야 하는 이유 : 안드로이드에서는 왜 static class를 만들어 진행해야 하는지에 대해서도 이해해야하고… 안드로이드에서는 화면(Activity)와 화면설계서(layout.xml)을 왜 분리해서 사용하는지에 대한 이해도 해야하고, 이렇게 분리된 자원(리소스)에 대해서 어떻게 접근하고 화면에서 조작하는 것에 따라 변경시킬지에 대한 이해도 필요하다. 모르는 것을 하나하나 배워가면서 시행착오를 겪게된다는 것을 받아들이지 않는다면 배움은 더디기만 할 것이다. 


아래는 나중에 자바와 개발에 대한 경험이 쌓이고 난 다음에 시작해도 늦지 않을 것임 



4. 서버사이드 개발 : 안드로이드에서 통신으로 접근하여 동작하는 API / 데이터 처리


  1. 참고사이트나 서적 :
    • 굉장히 많아서 ’딱! 이거다!’라고 설명하기 어렵다. 그때그때 필요나 문제에 따라서 찾아봐야한다.
    • 서버사이드는 자바로 개발할 수도 있고 다른 언어로 개발된 환경을 사용할 수도 있을 것이다.

5. 통신(HttpClient, API call)

6. 텍스트 데이터 파싱(마샬링Mashaling/언마샬링Unmashaling)

기본 입문서들은 있지만, 거기서 한단계 나아간 초중급 유저를 위한 서적은 없다는 생각을 한다.

지금껏 입문서를 읽었지만, 현업과는 조금 다른 이야기들이 많다. 안드로이드가 어떻게 동작하고 이렇게 저렇게 조작하기 위해서 요렇게 그렇게 하면 된다고 설명하는 책은 많이 봐왔다. 그런데 실제로 앱개발에 닥쳤을 때 활용할 만한 것들이 그리 많지가 않다.

안드로이드 개발을 본격적으로 시작한 개발자에게 필요한 안내가 적다. 보통 앱개발을 할 때는 서버쪽 API 개발이 병행되어 진행해야 한다. 조금 조직이 크고 업무분담이 잘 되어 있다면, 앱개발자는 서버 개발자에게 필요한 API에 대한 개발을 요청하고, 그것에 대한 처리만 앱에 구현하면 되겠지만 대부분 그렇게할 수 없는 회사에 다니는 이들이 대부분일 것이다. 그런 사람들은 서버와 앱개발 양쪽을 자신의 힘으로 처리해야하는 문제에 놓이게 된다. 양쪽을 설명하는 글은 찾아보기 힘들다. 인터넷 등으로 검색할 수 없는 숨은 고수들이 수면 밑에서 자신들의 기량을 갈고 닦고 있을지도 모르지만 대부분의 개발자들은 서버와 앱개발의 막막함 속에서 넋을 놓고 넉다운 되어 있을 가능성이 높다.

  그런 사람들에게 조금이라도 도움이 되는 글을 써볼 수 있을까?

  글이 담으려고 하는 주제는 '앱을 개발하면서 필요한 서버 API 들을 추가하면서 배워가는 안드로이드 개발'이라고 할까?

  참 거창하고 그럴싸한 주제인데... 쓰기는 참 거시기한 주제이기도 하다.

  톰캣, 스프링, 웹애플리케이션, xml, json, 안드로이드, 웹뷰, httpclient 등이 뒤섞인 내용이 될 것이라... 이것들을 충분히 이해하고 내것으로 만들어 낼 수 있을까라는 걱정도 든다. 되든안되든 시도를 해보는 것은 나쁘지 않겠다는 생각이 든다. ^^;


  우선은 내가 올해 하기로 했던, '자바 개발자를 위한 우분투 개발환경 구축 및 CI 구축 활용'에 대한 글부터 써내려가야 겠지만...

  욕심만 있지 실천을 제대로 안하고 있는 게으른 30대를 보내고 있구나. 하아.    


출처 : http://stackoverflow.com/questions/10564684/how-to-fix-error-updating-maven-project-unsupported-iclasspathentry-kind-4

I have imported maven project in STS, when I run update update project I receive:

"Updating Maven Project". Unsupported IClasspathEntry kind=4

Is there a workaround for this?


처리방법

Have you tried:

  1. If you have import project into the eclipse 4, please delete it.
  2. In maven consol, run: mvn eclipse:clean
  3. In Eclipse 4: File -> Import -> Maven -> Existing Maven Projects

이클립스에서 사용하는 m2e plugin의 문제인 듯 한데...

일반적으로 project를 workspace 에서  임포트(import)하여 프로젝트 등록시에 m2e 가 뭔가 문제를 발생하는 것으로 보인다. @_@)> 정확한 이유는 나로서는 알 수가 없... Orz... 사용할 수 있게 임하는 것이 좋지. ㅎㅎ

  오늘 회사 동료가 알려준 방법인데, 꽤 유용할 것 같아서 이렇게 기록으로 남긴다.


  
package dreaminfra.ipams.web.assessment;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;

@Controller
@SessionAttributes({"simpleForm"})
@RequestMapping("/simple")
public class SimpleController {

    private final static String SIMPLE_FORM = "simpleForm";
    
    /**
     *   컨트롤러에서 @SessionAttribute({"simpleForm"}) 으로 선언한 simpleForm을 초기화하여
     * Session에서 유지하기 위해 반드시 구현해줘야 하는 부분이다.
     * @return
     */
    @ModelAttribute(SIMPLE_FORM)
    public SimpleForm createSimpleForm() {
        return new SimpleForm();
    }
    
    @RequestMapping(value="/request", method=RequestMethod.GET)
    public String request(Model model) {
        /**
         * Session에 SIMPLE_FORM을 생성하여 등록한다.
         */
        model.addAttribute(SIMPLE_FORM, new SimpleForm());
        
        return "/simple/response";
    }

    @RequestMapping(value="/response", method=RequestMethod.POST)
    public String response(@ModelAttribute(SIMPLE_FORM) SimpleForm form, SessionStatus status) {
        /**
         * Session 에 등록된 SimpleForm 은 SessionStatus.setComplete()을 실행하기 전까지는
         * Session에서 내부의 데이터를 유지하게 된다. SessionStatus.setComplete()을 실행하면
         * Controller에서 선언해둔 SessionAttribute에 등록된 form이 초기화된다. 
         */
        status.setComplete();
        
        return "redirect:/simple/request";
    }
    
    class SimpleForm {
        
        private String name;
        private String nickName;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getNickName() {
            return nickName;
        }
        public void setNickName(String nickName) {
            this.nickName = nickName;
        }
    }
}


위에서 중요한 것은 Contoller 에서 선언한

SessionAttributes({"simpleForm"})

...

@ModelAttribute(SIMPLE_FORM)
    public SimpleForm createSimpleForm() {
        return new SimpleForm();
    }

...

model.addAttribute(SIMPLE_FORM, new SimpleForm());

...

session.setComplete()

부분이다.





+ Recent posts